#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了。