C學習雜記(四)sizeof計算聯合體大小

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章