解释包含结构的联合的sizeof运算符的结果

sas*_*har 0 c structure sizeof unions

#include<stdio.h>
struct mystruct
{
    char cc;
    float abc;
};
union sample
{
    int a;
    float b;
    char c;
    double d;
    struct mystruct s1;
};
int main()
{
    union sample u1;
    int k;
    u1.s1.abc=5.5;
    u1.s1.cc='a';

    printf("\n%c %f\n",u1.s1.cc,u1.s1.abc);
    k=sizeof(union sample);
    printf("%d\n\n",k);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

运算符的大小正在返回8我仍然能够访问结构元素,一次不止一个,并且sizeof运算符仍然返回我假设的原始数据类型的最大大小.为什么会这样?实际分配的大小是8?并且sizeof返回错误的值?或者实际分配的大小是8?那么结构是如何适应的?如果我们使用分配一个联合数组mallocsizeof在这种情况下分配足够的空间吗?请详细说明.

AnT*_*AnT 6

通常,联合的大小是其最大成员的大小.最大的成员[可能]是您的结构成员以及double成员.两者都有8号.所以,sizeof正确地告诉你,联盟的大小确实是8.

为什么你觉得奇怪?你为什么称8"错误的价值"?