共用体变量定义:
union 共用体名
{
成员表列
}变量表列;
}变量表列;
特点:1.同一个内存段可以用来存放几种不同类型的成员 ,但在每一瞬间只能存放其中一种,而不是同时存放几种。共用体变量中起作用的是最后一次存放的成员。共用体变量的地址和它各个成员的地址都是同一地址。
2.不能对共用体变量名赋值,不能引用变量名来得到一个值,不能在定义共用体变量时对它初始化。
3.不能把共用体变量作为函数参数,也不能是函数带回共用体变量,但可以使用共用体变量的指针。(与结构体变量这种用法相仿)。
4.共用体类型可以出现在结构体类型定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体中,数组也可以作为共用体的成员。
枚举体:
声明枚举体:enum weekday{sun,mon,tue,wed,thu,fri,sat};
声明了一个枚举类型enum weekday,可以用此类型来定义变量:enum weekday workday,week-end;
workday,week-end 的值只能是列表中的一个(sun-sat)。
说明:1.C编译中,对枚举元素按常理处理,故称枚举常量,不能对它们赋值。
2.枚举元素作为常量,它们是有值的,默认为0,1,2,3....。枚举元素的值也可在定义时由程序员制定。
3.枚举值可以用来作判断比较。如:if(workday==mon)..... if(workday>sun)....。一个整数不能直接赋给一个枚举变量。
workday=(enum weekday)2;
用tyedef定义已有类型的别名:
int *p; //p是类型为int *型的变量 typedef int *p; //p 是数据类型名(typedef-name),是int *p中p的数据类型int * int NUM[100]; //NUM是数据类型为 int[100]的变量 typedef int NUM[100]; //NUM是含有100个元素的数组类型的typedef-name,例如 int a[100];NUM b=a; typedef int (*NUM)[100];//int a[100]; NUM b=&a; int *Func(int); //Func的类型是函数标识符,返回值类型int*,参数为int typedef int *Func(int); //Func是函数类型的typedef-name,该函数返回值为int*,参数为int。Func *fptr; (fptr则是函数指针) typedef int (*Func)(int) //Func是指向函数的指针的数据类型名。Func fptr;(fptr则是函数指针) typedef struct{int mongth}DATA; // DATA birthday; typedef struct student STUD; typedef long duble REAL; //定义与平台无关的数据类型,用REAL定义一个浮点数,有些平台支持long duble,而有的平台不支持,则只需修改这里即可。提高了可移植性
说明:1.习惯上常把用typedef声明的类型名用大写字母表示。
2.typedef与#define:#define是在预编译是处理的,它只能做字符替换,而typedef是在编译时处理的,不是做简单的替换。
3.当不同 源文件中用到同一类型数据(尤其像数组,结构体,共用体,等)时,常用typedef声明一些数据类型,把他们单独放在一个文件中,然后在需要用到它们的文件中把他们包含进来。
4.使用typedef有利于程序的通用与移植。
较复杂的原型声明:void (*b[10]) (void (*)());
变量名为b,先替换右边部分括号里的,pFunParam为别名一:
typedef void (*pFunParam)();
再替换左边的变量b,pFunx为别名二:
typedef void (*pFunx)(pFunParam);
原声明的最简化版:
pFunx b[10];