刚学C,求解释。输出结果为什么是0?谢啦!

unionmyun{struct{intx,y,z;}u;intk;}a;main(){a.u.x=4;a.u.y=5;a.u.z=6;a.k=0;printf("%d"... 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",a.u.x);
}
展开
 我来答
█╬卍╬█
2013-02-23 · TA获得超过162个赞
知道小有建树答主
回答量:115
采纳率:0%
帮助的人:167万
展开全部

看这个图,不知道你能不能看懂


myun是一个联合体结构,对于联合体的内存分布,这里一两句话说不清楚,展开一下就是上图示意的这个,其中K和U是重叠的,如果要问为什么U和K重叠,好吧,去看联合体的内存分配方式。


弄清楚这个问题之后就好办了,可以很明显地发现a.u.x和a.k指向的是同一个int型内存区,也就是说它们的值不管何时都是完全一样的。


所以改变a.u.x,a.k会受到影响,反正亦然!


因为执行了a.k=0;这一句,所以a.u.x也就变成了0,所以输出的是0.

追问
看得不是很懂,但是知道了,我在看下书。谢谢。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式