为什么打印ch [1]给出2?

时间:2019-07-04 12:56:26

标签: c arrays output union

#include <stdio.h>

 int main()
 {
    union a
    {
        int i;
        char ch[2];
    };
    union a z = { 512 };
    printf("%d %d %d", z.i, z.ch[0], z.ch[1]);
 }

输出:

512 0 2

为什么打印ch[1]会给2

2 个答案:

答案 0 :(得分:1)

如您所知,

在一个联合中,所有成员都从内存中的同一位置开始。 因此ch[2]i从同一位置开始。 512 = 0x00000200。因此,在小尾数法中,第一个字节为00,第二个字节为02

答案 1 :(得分:0)

您的联合有4个字节,并分配有512个字节,这意味着您有

00:00:00:00-00:00:00:00-00:00:00:10-00:00:00:00

因为512是一个在其后有9个零的数字。

从这里很容易理解您的照片。

正如@Some程序员伙计所说,这是由于二进制数字看起来像+字节序。