联合体&枚举&自定义类型

联合体#

形如

1
2
3
4
5
6
7
union Union_name {
int a;
double b;
char c;
};

union Union_name demo;

和 结构体 struct 有什么区别?

结构体

各成员各自拥有自己的内存,各自使用互不干涉,同时存在的,遵循内存对齐原则。一个struct变量的总长度等于所有成员的长度之和。

联合体

各成员共用一块内存空间,并且同时只有一个成员可以得到这块内存的使用权(对该内存的读写),各变量共用一个内存首地址。任一时刻只有一个成员的数据是有意义的,即 a、b、c不能同时存在。

枚举#

形如

1
2
enum color{red,orange,yellow,green,blue,purple};
enum color x,y,z;

不可对枚举元素赋值,因为枚举元素本身就是常量。

合法赋值 x=red y=(enum color)4 等价于 x=red y=green 非法赋值 z=Monday

自定义类别#

形如

1
2
typedef 原类型名 新类型名
typedef char unint8_t;
char a; 等价于 uint8_t a;