1.什么是联合体
union S
{
char s1;
int i;
};
上面这段代码就是联合体的创建.
有人说联合体的大小就是联合体成员变量类型中最大的那个,这个说法是不对的.当然上面这个联合体的大小就为4个字节.但是如果在联合体内有数组呢,结果就不一样了,看下面这段代码
union S2
{
char arr[7];
int i;
};
运行结果如下
结果为8,也就是8个字节,这就说明了联合体在计算大小时也要遵循对齐规则.我们用计算结构体的方法推算一下,arr是是一个char类型的数组,每个元素占1个字节,总共有7个元素,也就是要占7个字节,但是在对齐规则里,总大小要为最大对齐数的整数倍,在该联合体中最大对齐数为4,也就是int 的大小,所以该联合体的大小为8个字节.