谁能帮我解释一下此代码段的处理

时间:2019-05-12 19:20:53

标签: c structure unions

实际上我是用在线c编译器编译的,代码输出为5 ...处理是如何进行的?

#include <stdio.h>

int main()
{
    struct ab {char a,b;};
    union abcd
    {
        int c;
        struct ab d;
    }k;
    k.d.a=5;
    k.d.b=0;
    printf("%d",k.c);
}

1 个答案:

答案 0 :(得分:1)

您在整数和包含2个字符的结构之间具有并集。

代码正在更改结构的第一个字符。由于存在联合,它将影响另一个联合成员的第一个字节,即整数。

在小端机上,将整数的第一个字节设置为5会使该整数5,这就是您在此处看到的。

在big-endian计算机上,根据整数的实际大小,您最终得到一个非常大的值。