C语言共用体有关问题
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++ codeaddress value-------------------------- (char *)&s 0x39(char *)&s+1 0x00(char *)&s+2 0x38(char *)&s+3 0x00so 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也一样被赋值,其他问题楼上的大师们已经说的很清楚了