main() { union { char i[2]; int k; } r; r.i[0]=2; r.i[1]=0; printf(“%d\n”,r.k); } 答案是多少?why?

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/26 14:35:46
main() { union { char i[2]; int k; } r; r.i[0]=2; r.i[1]=0; printf(“%d\n”,r.k); } 答案是多少?why?
xR]KP+P9Ww3! +.9} kc}%(L#{ʿл-9{=w|"p%E^PpKS"I$HEAH蘜I!8ŤI^$yl#SJG=|kpG`&\נu\[MƧi?DX۽su$ ~7*;ycAt_.uݭmñ|P ZƱ j\"~K> ?Zh,A wlo1W+އakNmx~`ϗ,^ es3mlMЌ\&W,G)s^lF4ۥ ۧ:|֗X8nKEkFGF F(.xO+ wCf

main() { union { char i[2]; int k; } r; r.i[0]=2; r.i[1]=0; printf(“%d\n”,r.k); } 答案是多少?why?
main() { union { char i[2]; int k; } r; r.i[0]=2; r.i[1]=0; printf(“%d\n”,r.k); } 答案是多少?why?

main() { union { char i[2]; int k; } r; r.i[0]=2; r.i[1]=0; printf(“%d\n”,r.k); } 答案是多少?why?
正常推理应该是2
union内存时按照元素最大的分配内存,所以r的size为4
char[3] char[2] char[1] char[0]
为char[0] 赋值为2, 为char[1]赋值为1
所以就变成了
char[3] char[2] 0 2
char[3] 和char[2] 值是不固定的(没有为之初始化,随机值,如果先memset(&r,0,sizeof(r)); 就清0了)
但是末尾2个字节一定是2
printf("%d\n",r.k & 0xff);////末2字节