【C语言共用体题目】啊啊啊啊啊啊啊~完全没有思路啊~~~求点拨!!

#include <stdio.h>
main()
{ union { short i[2];
long k;
char c[4];
}r,*s=&r;
s->i[0]=0x39; s->i[1]=0x38;
printf("%x\n",s->c[0]);
}
已知字符0的ASCII码值的十进制数是48,且数组的第0个元素在低位。以上程序的运行结果是__________

(俺滴共用体这块学的不咋地。。这道题拿过来就只知道r是短整型的。。望高手详解~~~多谢多谢!!)

共用体的意思是内部的变量都共享同一块储存的地方,也就是其中一个的值改变就会影响其他的值。你的题目共用体内i, k, c都是指向相同的地方的s指针指向r,r是这个共用体。
short在内存中占两个字节,char占一个字节,long占4个字节,这样子算上数组整个共用体的三个量都占4个字节,公用体也占四个字节。那么经过 s->i[0]=0x39; s->i[1]=0x38;之后,共用体在内存中就成了这样,从低位到高位:
39 00 38 00
这时候,你去读long这个变量,内存这四个字节就会按照long来理解,即0x380039,十进制3670073,如果去读c,那么c数组变量按照char类型来理解,那么c从第0个到第3个则为,0x39, 0x00, 0x38, 0x00。所以你题目的答案c[0]就是0x39。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-06
应该输出0
短整型占2个字节,char占1个字节。0x39化成2进制是0000 0000 0011 1001,c[0] = 0000 0000,但%x是按照十六进制输出,不是按char输出,所以就是0
第2个回答  2011-03-06
0x39=57(10)=0000 0000 0011 1001=0011 1001=57(10)=0x39=39
答案是39
相似回答