在c中解释了sizeof运算符对union的行为

时间:2014-05-02 10:15:38

标签: c

#include <stdio.h> 
int main(void)
{
    union Acnt
    {
        int Acno,Bal;
        char name[10];
        float EMI;
    };

    printf("%d", sizeof(union Acnt));
    return 0;
}

此联合中最大的成员大小为10.但输出为12.请解释原因。

1 个答案:

答案 0 :(得分:3)

union的总大小将是大于(或等于)所需大小的最小整数,并且是union中最大类型的倍数。在你的情况下,union将被填充到float / int&gt; = 10的最小倍数。你可以通过pack pragma阻止填充:

#include <stdio.h>
int main(int argc, char *argv[]) {
#pragma pack(push, 1)
    union Acnt
    {   
        int Acno,Bal;
        char name[10];
        float EMI;
    };  
#pragma pack(pop)

        printf("%d",sizeof(union Acnt));
    return 0;
}