.联合体union特性
- 联合体所有成员变量共享内存,相对于联合体首地址偏移量都为0
- 同一时间只能存储1个被选择的变量,对其他成员变量赋值会覆盖原变量
2.联合体大小计算准则
- 联合体大小要至少能容纳最大的成员变量
- 联合体大小要是所有成员变量类型大小的整数倍
3.例子
typedef union u{ char a; int b[5]; double c; int d[3]; }U; typedef struct s { int e; double f; short g; U h; char i[2]; }S;
- U大小至少要容纳最大的b[5]=4*5=20字节,同时要是变量类型最大值得整数倍,即sizeof(double)=8的整数倍,所有sizeof(U)=24
- s的大小计算需要看上一篇关于结构体大小的计算的文章,联合体的自身对齐值为成员变量的最大对齐值,也就double的自身对齐值8,所以s得大小为0+4+4+8+2+6+24+2+6=56