联盟和内存管理

Neo*_*eoR 0 c bits unions

我在接受采访时给了我以下代码: -

union mix
{
    int i;
    char c[2];
};

int main()
{
    union mix key;
    key.i=512;
    printf("\n %d,%d,%d",key.i,key.c[0],key.c[1]);
    return 0;   
}
Run Code Online (Sandbox Code Playgroud)

当我回到家并在系统上运行时,我得到了输出: - 512,0,2.

任何人都可以向我解释它是如何工作的或为什么c [1] = 2

编辑: - 我所知道的是它与内存中的位存储有关.

Mos*_*ieb 5

这是一个工会,意义ic占用相同的内存.
512是0x200,意味着第一个字节是零,第二个是2(每个字节取两个十六进制数字).
这当然取决于CPU的字节顺序.