枚举
将可能的取值一一列举出来;
枚举类型的定义
enum Day
{
Mon, // 0
Tues, // 1
Wed, // 2
Thur, // 3
Fri, // 4
Sat, // 5
Sun // 6
};
int main()
{
enum Day d = Fri;
printf("%d\n", Mon); // 0
printf("%d\n", Tues); // 1
printf("%d\n", Wed); // 2
return 0;
}
指定枚举的默认数值:
enum Day
{
Mon=1, // 1
Tues, // 2
Wed, // 3
Thur, // 4
Fri, // 5
Sat, // 6
Sun // 7
};
枚举的优点
- 增加代码的可读性和可维护性
- 和#define定义的标识符比较,枚举有类型检查,更严谨
- 防止命名污染(封装)
- 便于调试
- 使用方便,一次可以定义多个常量
联合(共用体)
也是一种特殊的自定义类型;
该类型定义的变量包含一系列成员,特征是这些成员共用同一块空间;
联合的定义
union Un
{
int a;
char c;
};
int main()
{
union Un u;
struct St s;
printf("%d\n", sizeof(u)); // 4
return 0;
}
一个联合体的大小,至少是最大成员的大小;
联合体的大小
union Un
{
char arr[5]; // 对齐数为1(char)
int i; // 对齐数为4
}; // 整个联合体的对齐数为4,因此整个联合体的大小是4的倍数
int main()
{
printf("%d\n", sizeof(union Un); // 8
return 0;
}