C语言中共用体问题

uniondt{inta;charb;doublec;}data;程序段:data.a=5;printf("%f\n",data.c);输出结果为5.00000请问这个输... union dt { int a; char b; double c; }data;
程序段:data.a=5;printf("%f\n",data.c);输出结果为5.00000

请问这个输出结果为什么错了?
谢谢~~
b和c应该是可以根据他们的定义输出值的吧,还有我不太明白为什么那位同学的c=0.可不可以再说清楚一点?谢谢!!
展开
 我来答
tianjie890000
2010-09-04 · TA获得超过1739个赞
知道小有建树答主
回答量:339
采纳率:0%
帮助的人:472万
展开全部
楼主的意思是数出的结果应该是5.00000这个结果吧!
其实不然,首先你要理解共用体的含义,它不是表示共用体能够同时放入三个不同类系的数据。共用体实际上只有一个存储单位,在每一个瞬间只有一个类型的数据被存入里面,也就是它才起作用,你这里把data.a=5,说明共用体中整形数被赋值,这里的data.b,data.c就不存在了,所以只能正常的输出a的值,而数出b和c的值都是错误的。
如果你再赋值data.b='d',那么这个共用体的值就是d,其它两个类型不起作用。也就是说,共用体的数据在某一个瞬间只有一个数据类型其作用,其它几种都是不存在的!
yjx06030150
2010-09-04 · TA获得超过439个赞
知道答主
回答量:139
采纳率:100%
帮助的人:53.3万
展开全部
共用体类型数据的特点:
1) 同一个内存段可以存放几种不同类型的成员
2) 共用体变量中起作用的成员是最后一次存放的成员
3) 不能对共用体变量名赋值,不能在定义时初始化。
4) 不能把共用体变量作为函数参数
5) 共用体类型可以出现在结构体定义中,反之也可,也可以定义共用体数组。
另外,结构体名可以作为参数,而共用体名不可以。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
warmwormn
2010-09-04 · TA获得超过737个赞
知道小有建树答主
回答量:1694
采纳率:0%
帮助的人:1328万
展开全部

union的内存结构 

a = 5

b = 5

c = 2.470328229206e-323 = 0

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
【【忘记】】
2010-09-04 · TA获得超过404个赞
知道答主
回答量:392
采纳率:0%
帮助的人:0
展开全部
a=5,干嘛输出c!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式