鱼C论坛

 找回密码
 立即注册
查看: 3673|回复: 4

C共同体问题

[复制链接]
发表于 2013-1-28 11:35:17 | 显示全部楼层 |阅读模式
5鱼币
  1. main()
  2. {union { int i; int j; int f;}a;
  3. a.i=10;a.j=50;a.f=5;
  4. printf("%d %d\n",a.i,a.j+a.f);}
复制代码
运行后为什么是5 10 而不是10 55 ? 求解释!!

最佳答案

查看完整内容

共同体特性 :允许不同数据类型使用同一个内存 也就是说他们的虚拟内存地址是相同的 每次只能赋一种值,赋入新值则冲去旧值 相互覆盖 首先a.i=10 然后a.j=50 最后a.f=5 可以看出相互覆盖 所以最后答案是5 ,5+5=10
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-28 11:35:18 | 显示全部楼层
共同体特性 :允许不同数据类型使用同一个内存
也就是说他们的虚拟内存地址是相同的
每次只能赋一种值,赋入新值则冲去旧值
相互覆盖
首先a.i=10
1.jpg
然后a.j=50
2.jpg
最后a.f=5
3.jpg
可以看出相互覆盖

所以最后答案是5 ,5+5=10
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-28 22:29:43 | 显示全部楼层
本帖最后由 思无邪 于 2013-1-28 22:42 编辑

关键重点你要记住===》联合体只能保存一个变量的值。
一般联合中会放不同类型的变量才会更有实际意义。如果你去打印三个变量的地址,你会发现它们是相同的。
打个比方说吧,union a { 水杯;水壶 };//水杯、水壶代表变量占的内存的字节大小
那么这个联合的大小就是按水壶来算的。因为 水壶 既可以容纳 水杯 的变量,也可以容纳水壶的容量。

讲的不是很确切,不知你明白了没。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-29 01:27:59 | 显示全部楼层
本帖最后由 消失在黑暗中 于 2013-1-29 01:34 编辑

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-2-2 15:12:09 | 显示全部楼层
:dizzy:.......................................................................................
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-8 18:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表