下列程序的输出结果为?#includevoid 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
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/21 09:21:37
下列程序的输出结果为?#includevoid 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
下列程序的输出结果为?
#include
void 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
下列程序的输出结果为?#includevoid 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
VC下运行的结果是
0xCCCC3839
原因,
共同体中,变量有相同的起始地址.
也就是说
i[0]的地址就是k的起始地址.
也就是说k的起始地址就是数组第一个元素的地址.
然后
k占4个字节.
函数中的局部变量如果没有初始化.
k是0XCCCCCCCC.
由于起始地址指向的变量的最低位字节,随着地址增大指向高位字节.
有
s->i[0]=0x39;
s->i[1]=0x38;
所以后2个字节变成了
0XCCCC3839.
0X表示是16进制表示.
这道题靠的就是共同体中变量的内存分布.
答案是A.
但是其实在VC下结果应该是
CCCC3839
因为,共同体中的变量k没有初始化.
主要理解,共同体下,变量共享起始地址.