代码之家  ›  专栏  ›  技术社区  ›  NeoR

联合和内存管理[重复]

  •  0
  • NeoR  · 技术社区  · 8 年前

    我参加了一次面试,得到了以下代码:-

    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;   
    }
    

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

    它是如何工作的,或者为什么c[1]=2 ?

    编辑:-我只知道它与内存中的位存储有关。

    1 回复  |  直到 8 年前
        1
  •  5
  •   Moshe Gottlieb    8 年前

    这是一个联盟,意思是 i c 占用相同的内存。
    512为0x200,表示第一个字节为零,第二个字节为2(每个字节取两个十六进制数字)。
    这当然取决于CPU的endianness。