为什么这个c程序的输出是这样的?

Swa*_*ain 1 c

以下代码的输出为512 0 2但是它应该是512 0 0.有人可以帮忙!

 #include<stdio.h>
    int main()
    {
        union a
        {
            int i;
            char ch[2];
        };
        union a z = { 512 };
        printf("%d %d %d\n",z.i, z.ch[0], z.ch[1]);
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

Mik*_*ike 5

您已经构建了两个字节的并集.知道你为联盟分配512d(0x0200).第一个字节= 0x00第二个字节= 0x02

整数i和你的数组ch [2]使用相同的内存!