联合体联合体也是由多个成员组成的,成员可以是不同的类型,联合体的关键字是union。联合体的声明Un1是自定义类型名。联合体的大小计算编译器只为最大的成员分配足够的内存空间,所有成员共用一块内存,所以联合体也称为共用体。改变一个成员的值,其他成员的值也会随着改变。调试过程如下:给a赋值后:改变b的值后:联合体的大小最小都是最大成员的大小,如果联合体的大小不是所有成员的最大对齐数的整数倍,就要对齐到最大成员的整数倍上。short arr[5]占10个字节,但short占2个字节,VS默认对齐数为8,所以取对齐数为2,int占4个字节,VS默认对齐数为8,取对齐数为4,所以联合体的最大对齐数为4,本来占10个字节,要对齐到最大对齐数4的整数倍上,该联合体大小为12。枚举枚举顾名思义就是列举,枚举就是把所有情况一 一列举出来,如星期、三原色、性别等,这些数据就可以使用枚举。枚举的关键字是enum。枚举的声明枚举的优点我们也可以用define定义常量,为什么非要使用枚举?增加代码的可读性和可维护性。和#define定义的标识符比较,枚举有类型检查,更加严谨。便于调试,预处理阶段会删除#define定义的符号。使用方面,一次性可以定义多个常量。枚举常量是遵循作用域规则的,枚举声明在函数内时,只能在函数内使用。枚举的使用枚举类型创建的常量可以进行初始化,当没有进行初始化时,默认从0往下排在C语言中检查没有那么严格,在赋enum day类型的常量时可以写S=3,C++中检查比较严格,必须写成S=Mon。
联合体联合体也是由多个成员组成的,成员可以是不同的类型,联合体的关键字是union。联合体的声明Un1是自定义类型名。联合体的大小计算编译器只为最大的成员分配足够的内存空间,所有成员共用一块内存,所以联合体也称为共用体。改变一个成员的值,其他成员的值也会随着改变。调试过程如下:给a赋值后:改变b的值后:联合体的大小最小都是最大成员的大小,如果联合体的大小不是所有成员的最大对齐数的整数倍,就要对齐到最大成员的整数倍上。short arr[5]占10个字节,但short占2个字节,VS默认对齐数为8,所以取对齐数为2,int占4个字节,VS默认对齐数为8,取对齐数为4,所以联合体的最大对齐数为4,本来占10个字节,要对齐到最大对齐数4的整数倍上,该联合体大小为12。枚举枚举顾名思义就是列举,枚举就是把所有情况一 一列举出来,如星期、三原色、性别等,这些数据就可以使用枚举。枚举的关键字是enum。枚举的声明枚举的优点我们也可以用define定义常量,为什么非要使用枚举?增加代码的可读性和可维护性。和#define定义的标识符比较,枚举有类型检查,更加严谨。便于调试,预处理阶段会删除#define定义的符号。使用方面,一次性可以定义多个常量。枚举常量是遵循作用域规则的,枚举声明在函数内时,只能在函数内使用。枚举的使用枚举类型创建的常量可以进行初始化,当没有进行初始化时,默认从0往下排在C语言中检查没有那么严格,在赋enum day类型的常量时可以写S=3,C++中检查比较严格,必须写成S=Mon。