| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 508 人关注过本帖
标题:一道令人费解的共用体题目!高手帮忙!
只看楼主 加入收藏
kate333333
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-2-16
收藏
 问题点数:0 回复次数:6 
一道令人费解的共用体题目!高手帮忙!

#include<stdio.h>
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 %d %d %d\n",a.u.x);
getch(); /*提问:输出 0 ???*/

}

2007-02-16 18:53
kate333333
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-2-16
收藏
得分:0 
不仅如此,在调试过程中,将a.k=0;写到a.u.x=4;之前,则输出4
为什么呢?请高手帮忙!

664934112
2007-02-16 19:20
alading664
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-1-25
收藏
得分:0 

这就是联合啊
数据结构a只有一个k 或者u

2007-02-16 20:38
编程小鸟
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-2-13
收藏
得分:0 
那当然拉 当a.k=0;在最后的时候 把前面的都冲掉了么 所以输出0 因为a.k=0;是把整个共用体都改了啊
a.u.x=4的时候 那就肯定的拉 输出的就是a.u.x 当然是4咯
2007-02-16 20:56
caoxiao1986
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-2-16
收藏
得分:0 
呵呵,这个问题楼主肯定是忽视了struct和union的在占用空间方面的差别了:
union占用的是其数据项中的最大项的内存空间数,而struct则是数据项的总和。
你的程序中,struct占用是3个,(设一个int一个),而int k只有一个,所以这个union只有3个int的大小,里面struct和int k的内存首地址是相同的,你如果修改了stuct三个数据项的第一个变量的值,那k的值也跟着改变,所以x和k的值在最后是相同的,因为它们对应的内存地址是相同的。你如果把第一个x改为y或者z的话,那k的值和y和z就是相同的。

你可以用VC自己调试看看,就知道怎么回事了,:)
2007-02-16 21:02
caoxiao1986
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-2-16
收藏
得分:0 
补充:之所以输出0,0×××××,是因为楼主粗心了吧,^_^,应该写成
printf("%d %d %d %d\n",a.u.y,a.u.z,a.k,a.u.x);
2007-02-16 21:05
kate333333
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2007-2-16
收藏
得分:0 
喔……哥们儿们说得太对了
小弟在此拜谢!!!新年快乐!!!

664934112
2007-02-17 18:01
快速回复:一道令人费解的共用体题目!高手帮忙!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017046 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved