请教这个C语言怎么执行,答案知道,拜托说个过程

来源:百度知道 编辑:UC知道 时间:2024/06/15 15:16:46
输出结果
#include<stdio.h>
main()
{ union { int i[2];
long k;
char c[4];
} r,*s=&r;
s->i[0]=0x39;
s->i[1]=0x38;
printf("%lx\n",s->k);
}



主要就是搞清楚union里的内存排列,
i[0]在0-3字节,i[1]在4-7. k在0-3, c[0]在0, c[1]在1, c[2]在2, c[3]在3.

这样你给s->i[0]赋值,就是在0-3字节写东西,所以 k, c0-3都变了。
所以最后结果就是k=0x39

这个题显然是陈年老题了, 当时给的答案估计还是 0x380039之类的, 现在int已经是32位了,所以这个小把戏玩漏了。。 出题的时候严谨点应该写short而不是int

输出结果 380039
共用型:数组i、变量k、数组c占用相同的内存,共4字节。
s->i[0]=0x39;
s->i[1]=0x38;
执行后,4字节为00,38,00,39
k为长整型,4字节,值为380039