首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-04-22 
求大神看一段关于联合体的代码#include stdio.hunion{  int i  char x[2]}avoid main(){  a.x[0] 10

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

#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

热点排行