读书人

求大神瞥一段关于联合体的代码

发布时间: 2013-04-22 16:01:35 作者: rapoo

求大神看一段关于联合体的代码

#include <stdio.h>
union
{
  int i;
  char x[2];
}a;

void main()
{
  a.x[0] =10;
  a.x[1] =1;
  printf("%d",a.i);
}


输出的结果为什么是266 求大神详解 最好也说联合体的内存情况 谢谢
[解决办法]
int为四个字节,char为一个字节,x[0] = 0x0a;x[1] = 0x01;这两个字符填充到了int后两个字节上,即为0x0000010a;所以int i = 266了
[解决办法]
int i是8个字节,char x[2]是2个字节,在小端CPU模式下,联合是从低字节开始对齐。

字节 1 2 3 4 5 6 7 8
-----------------------------
i 0 0 0 0 0 0 1 10
x 1 10

i对齐x的低两个字节,所以i = (1 * 256) + 10 = 266

读书人网 >C++

热点推荐