枚举就是把有限的可能一一列举。
比如一周的七天,一年的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. 使用方便,可以一次定义多个枚举常量。
-
枚举的使用
和结构体类似,可以使用已定义好的枚举类型定义枚举变量,枚举变量的取值应该是枚举类型定义中的枚举变量。
-
联合的定义
联合也是一种特殊的自定义类型,特点是成员共用一块内存空间,所以也叫共用体。
-
联合的特点
联合的大小至少是最大成员变量的大小,每个时刻只能有一个成员变量起作用。
利用联合体共用内存的特点,可以判断机器的大小端。
#include <stdio.h>
int 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;
}
-
联合大小的计算
联合体的大小是能容纳最大成员变量,和成员变量最大对齐数的整数倍,取大者。