#include <stdio.h>union u1
{char a[13];int b;
};int main(void)
{printf("%d\n", sizeof(u1));return 0;
}
结果为16。
联合体的大小取决于它所有的成员中占用空间最大的一个成员的大小。u2最大的空间是char[13],但是因为另一个成员int b的存在,u2的对齐方式变成4,所以u2的大小必须在4的对齐上占用空间最接近13,即16。
稍微修改代码
#include <stdio.h>#pragrma pack(2)union u1
{char a[13];int b;
};int main(void)
{printf("%d\n", sizeof(u1));return 0;
}
结果为14,因为对齐方式改为2了。