单选题
以下程序的输出结果是()。
以下程序的输出结果是()。
union myun
{ struct
{ int x, y, z; } u;
int k;
} a;
main()
{ a.u.x=4; a.u.y=5; a.u.z=6;
a.k=0;
printf("%d\n",a.u.x);}
A
4
B
5
C
6
D
0
答案解析
正确答案:D
解析:
易错
myun是一个联合体结构,对于联合体的内存分布,这里一两句话说不清楚,展开一下就是上图示意的这个,其中K和U是重叠的,如果要问为什么U和K重叠,好吧,去看联合体的内存分配方式。
弄清楚这个问题之后就好办了,可以很明显地发现a.u.x和a.k指向的是同一个int型内存区,也就是说它们的值不管何时都是完全一样的。
所以改变a.u.x,a.k会受到影响,反正亦然!
因为执行了a.k=0;这一句,所以a.u.x也就变成了0,所以输出的是0.
myun是一个联合体结构,对于联合体的内存分布,这里一两句话说不清楚,展开一下就是上图示意的这个,其中K和U是重叠的,如果要问为什么U和K重叠,好吧,去看联合体的内存分配方式。
弄清楚这个问题之后就好办了,可以很明显地发现a.u.x和a.k指向的是同一个int型内存区,也就是说它们的值不管何时都是完全一样的。
所以改变a.u.x,a.k会受到影响,反正亦然!
因为执行了a.k=0;这一句,所以a.u.x也就变成了0,所以输出的是0.
