struct
struct 结构体名 { // 结构体定义
...
};
struct 结构体名 变量名; // 结构体实例化
struct { // 匿名结构体
...
} 变量名;
struct employee { // 结构体初始化
char name[32];
int age;
] e1 = {"Zheng wei", 12};
struct employee el = {"Zheng wei", 12}; // 结构体初始化
union
union 联合体名 {...}; // 定义
union 联合体名 变量名; // 实例化
联合体与结构体最重要的区别在于其存储空间的分配方式不同。联合体是把各个成员放在同一内存区域中,尽管各个数据成员占用字节数不相同,但起始地址都一样,它用“覆盖”技术,使多个变量互相覆盖。因此联合体变量所占用内存长度是其最长数据成员的长度。
enum
enum 枚举名 {枚举元素列表}; // 定义
在枚举元素列表中以此列出该类型中所有的元素,即枚举常量。若在定义中没给出这些元素的值,则这些元素依次被自动赋值为0,1,2,…。如:enum Color {red, green, black, yellow, blue, white};
定义了枚举类型Color
,其中red=0,green=1,...,white=5
。若给其中某个元素赋值为N,则被赋值元素及其后面元素被赋值为N+i,i为对应元素在被赋值元素后的相对位置。如:enum Color {red, green, black = 0, yellow, blue, white};
则red=0,green=1,black=0,yellow=1,blue=2,white=3
注意,枚举元素本身是常量,不可在程序中再对其赋值,且每个枚举元素都是一个确定的整型数值。
enum Color {red, yellow, black}; // 定义
enum Color a, b; // 实例化
a = red; // 正确
a = 0; // 错误
a = (enum Color)0; // 正确