1联合union
联合 (union) 是一个能在同一个存储空间里(但不同时)存储不同类型数据的数据类型。
编译器为联合分配足够的空间保存所描述的可能性的最大需要。
下面是一个带有标记的联合模板例子:
union hold{ //带有标记的联合的模板
int digit;
double bigf1;
char letter;
};
下面是定义3个 hold 类型联合变量的例子
union hold fit; //hold类型的联合变量
union hold save[10]; //10个联合变量的数组
union hold *pu; //指向hold类型变量的指针
初始化联合:
union hold valA;
valA.letter = 'R';
union hold valB = valA; //把一个联合初始化为另一个联合
union hold valc = {88}; //初始化联合的 digit 成员
union hold valD = {.bigf1 = 118.2}; //指定初始化项目
联合的使用方法:即使有足够的空间,也不能同时保存2个值
fit.digit = 23; //把 23 存储在 fit 中,使用 4 个字节
fit.bigf1 = 2.0; //清除 23,存储2.0,使用 8 个字节
fit.letter = 'h'; //清除 2.0,存储 'h',使用1个字节
2枚举enum
枚举值属于构造类型
{
Monday = 1,
TuesDay,
WednesDay,
TursDay,
FriDay,
SaturDay,
SunDay
};
枚举是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。
1.在C编译系统中,枚举值是常量,不是变量,只有在定义时才能对其赋值,不能在程序中再使用赋值语句对他们赋值。
2.枚举值是常量,它们是有值的,按定义的顺序使它们的值为 0, 1, 2… 。
上面定义的枚举类型 WeekDay 中,MonDay 的值为 0 ,TuesDay 的值为1 … ,这些都是系统自动赋给的。如果定义时赋值 MonDay=2 ,那么输出day的时候 day=4;如果定义时赋值 MonDay=2,同时赋值 FriDay=3 时,输出 day 的值还是 day=4 。
{
printf("day = %d ",day);
printf("day2 = %d ",day2);
}
4.给枚举变量赋值时不能直接赋整数,因为它们属于不同的数据类型,应先强制类型转换才能赋值。
day2=(enum WeekDay)4;