C语言选择题解释 急 105

来源:百度知道 编辑:UC知道 时间:2024/07/04 19:10:28
105. # include<stdio.h>
main()
{ union
{ int k;
char i[2];
} *s, a;
s=&a;
s->i[0]=0x39; s->i[1]=0x38;
printf("%x\n",s->k);
}
A) 3839 B) 3938 C) 380039 D) 390038
解释一下吧。。

A
这个还是共用体的存储。k和i共占用一段地址空间,但int占四个字节,i占两个字节,共用体按最大的来算,应该占四个字节.在内存里i是先存在低地址,再存入高地址,所以内存中四个字节按高到低分别是0,0,38,39.如果int型存入一个1,在内存中按高到低分别是0,0,0,1.所以在输出k的时候是3839.
说得有点罗嗦了,最好看一下具体的内存存储就明白了。