读书人

C语言共用体有关问题

发布时间: 2012-03-13 11:21:12 作者: rapoo

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也一样被赋值,其他问题楼上的大师们已经说的很清楚了

读书人网 >C语言

热点推荐