main() { union { char i[2]; int k; } r; r.i[0]=2; r.i[1]=0;

问题描述:

main() { union { char i[2]; int k; } r; r.i[0]=2; r.i[1]=0; printf(“%d\n”,r.k); } 答案是多少?why?
1个回答 分类: 综合 2014-11-19

问题解答:

我来补答
正常推理应该是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字节
展开全文阅读