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

C语言共用体有关问题

2012-03-13 
C语言共用体问题#includestdio.hmain(){union{int a[2]long bchar c[4]}ss.a[0]0x39s.a[1]0x38p

C语言共用体问题
#include<stdio.h> 
main()
{
union 
{
int a[2];
long b;
char c[4];
}s;
s.a[0]=0x39;
s.a[1]=0x38;
printf("%lx\n",s.b);
printf("%c\n",s.c[0]);

}
运行结果是:380039
  9
为什么啊?请高手指点

[解决办法]

C/C++ code
address        value--------------------------    (char *)&s     0x39(char *)&s+1   0x00(char *)&s+2   0x38(char *)&s+3   0x00so s.b=0x380039s.c[0] = 0x39(/*字符显示为9*/)
[解决办法]
探讨
C/C++ codeaddress value--------------------------(char*)&s0x39(char*)&s+10x00(char*)&s+20x38(char*)&s+30x00so
s.b=0x380039s.c[0]=0x39(/*字符显示为9*/)

[解决办法]
要讲解,而不是结果~嘿嘿
结果看了,别人还是不明白的~

授人以鱼,还不如 授人以渔
[解决办法]
我觉得运行结果有问题
在我的VC6的环境下结果是
39
9

这样才能解释通,首先现在的32位机,int型默认是32位的,所以等同于long型,
union

int a[2]; 
long b; 
char c[4]; 
}s; 
那么,b的内存模型等同于a[0],现在a[0]赋值为0x39那,b也一样被赋值,其他问题楼上的大师们已经说的很清楚了

热点排行