在C中初始化一个联合

带亨特斯维尔

我遇到了有关C编程语言的客观问题。以下代码的输出应该是0 2,但我不明白为什么。

请说明初始化过程。这是代码:

#include <stdio.h>

int main()
{
  union a
  {
    int x;
    char y[2];
  };
  union a z = {512};
  printf("\n%d %d", z.y[0], z.y[1]);
  return 0;
}
阿琼·斯瑞达拉恩

我将假设您使用一点endian系统,其中sizeofint4 bytes (32 bits),sizeof achar1 byte (8 bits),其中一个以2的补码形式表示整数。一个union仅具有其最大成员的大小,并且所有成员都指向此确切的内存。

现在,您正在向该内存写入一个整数值512

512是二进制1000000000

或采用32位二进制补码形式:

00000000 00000000 00000010 00000000

现在将其转换为其小端序表示,您将获得:

00000000 00000010 00000000 00000000
|______| |______|
   |         |
  y[0]      y[1]

现在看到上面的内容,当您使用char数组的索引访问它时会发生什么

因此,y[0]00000000其是0

y[1]00000010这是2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章