枚举就是把有限的可能一一列举。
比如一周的七天,一年的12个月等等。
联合是不同的成员变量共用同一块内存,但存在内存对齐。
- 枚举的定义
关键字:enum
enum typename
{
枚举常量,
};
例如:
enum Day//星期
{
Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};
在C中,enum Day就是自定义的一个枚举类型,在C++中,可以省去enum。
里面的Mon, Tues...就是枚举常量。
枚举常量的值默认从0开始依次增加1,比如Mon是0,Tues是1...
也可以自定义初始值,若自定义了初始值,则后面的枚举常量默认按照定义的值依次加1作为初始值。
- 枚举的优点
1. 增加代码可读性和可维护性
可以为枚举常量取有意义的名字,做到望码知义。
2. 和#define相比有类型检查,更加严谨。
#define定义的宏和符号常量是没有类型的,编译器无法对其进行类型检查,但是枚举常量是有类型的,虽然在C中可以用整型替换,但在C++中被严格限制。
3. 防止命名污染
4.便于调试
#define定义的宏和符号常量会在预处理阶段被全部替换,在链接好的可执行程序中是没有这些符号的,所以不能调试;而枚举常量是保存在只读代码区,可以看到相关调试信息。
5. 使用方便,可以一次定义多个枚举常量。
- 枚举的使用
和结构体类似,可以使用已定义好的枚举类型定义枚举变量,枚举变量的取值应该是枚举类型定义中的枚举变量。
- 联合的定义
联合也是一种特殊的自定义类型,特点是成员共用一块内存空间,所以也叫共用体。
- 联合的特点
联合的大小至少是最大成员变量的大小,每个时刻只能有一个成员变量起作用。
利用联合体共用内存的特点,可以判断机器的大小端。
#includeint SysCheck() { union u { int i; char c; }; union u test; test.i = 1; return test.c; } int main() { int ret = SysCheck(); if (ret == 1) { printf("小端n"); } else { printf("大端n"); } return 0; }
- 联合大小的计算
联合体的大小是能容纳最大成员变量,和成员变量最大对齐数的整数倍,取大者。



