说了结构体,就不得不说联合和枚举。
联合这个类型的设计就是为了节省内存,联合内的元素共用一段存储空间,空间大小由最大的数据元素决定。联合空间只有一个最新赋值的成员值有效。一句话总结:空间共享,后来为主。
联合的定义跟结构一样,也有3种方式“:
union UNI
{
char ch;
float x;
};
union UNI u;
或
typedef union UNI
{
char ch;
float x;
}UNI;
UNI u;
或
typedef union
{
char ch;
float x;
}UNI;
UNI u;
联合变量u可以初始化,但只能初始化第一个成员,即不能对联合变量整体赋值。
枚举类型也是一种用户自定义类型,它允许用户定义有限个常量(注意是常量!),每个常量由用户自己的标识符来标示,这种类型更贴近处理实际问题,每个常量标识符都有确定的意义,增强代码的可读性。
枚举类型的定义与结构体、联合一样,
例:enum WEEKDAY {Sun,Mon,Tue,Wed,Thu,Fri,Sat};
enum WEEKDAY w;
给枚举变量赋值的一般是枚举元素,用常量表达式给枚举变量赋值时必须要强制类型转换,枚举元素是常量,不能作为左值!
w = mon; //枚举元素给枚举变量赋值
w = (enum WEEKDAY)6;// 常量表达式给枚举变量赋值
mon = (enum WEEKDAY)1;//非法