首页 > 解决方案 > 谁能帮我解释一下这段代码的处理过程

问题描述

实际上我在一个在线 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);
}

标签: cstructureunions

解决方案


你有一个整数和一个包含 2 个字符的结构之间的联合。

该代码正在更改结构的第一个字符。因为联合,它会影响另一个联合成员的第一个字节,也就是整数。

在 little-endian 机器上,将整数的第一个字节设置为 5 会使该整数为 5,这就是您在此处看到的内容。

在大端机器上,您最终会得到一个非常大的值,具体取决于整数的实际大小。


推荐阅读