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