c语言问题 公用体

程序如下:输出的结果是:1000书中的定义:“共用体变量中的所有成员共享一段公共存储区所以共用体变量所占内存字节数与其成员中占字节数最多的那个成员相等”问题:上面这句话应... 程序如下:

输出的结果是:1000

书中的定义:
“共用体变量中的所有成员
共享一段公共存储区
所以共用体变量所占内存字节数
与其成员中占字节数最多的那个成员相等”

问题:
上面这句话应该怎么理解?
实际在计算机内存中是怎么运行的?
展开
 我来答
浮云瞎了眼
2015-01-22 · 超过23用户采纳过TA的回答
知道答主
回答量:44
采纳率:0%
帮助的人:39.7万
展开全部
在你上面那个例子中 联合体的char类型 他实际在内存中的字节数是4个字节

整个联合体的内存是12个字节 因为联合体他的内存存储是跟相邻基础数据类型一致的

所占内容小的要扩张 因为4个字节的类型不可能缩小 所以内存直接为char分4个字节的内存
寒寒家
2015-01-22 · TA获得超过2919个赞
知道大有可为答主
回答量:1482
采纳率:100%
帮助的人:1960万
展开全部

Union类型占的内存由元素中占内存最大的元素决定(和这个元素占的字节数相同)


不同元素公用的是同一块内存。


比如这个例子中,char *和两个int类型的变量,三者占的内存都是sizeof(int) (指针占的字节数一般和int类型相同)


而且这三个变量用的是同一块内存。

  1. s.name = "WONGLONG"; 这是把这个常量字符串的首地址赋值给了s.name,也就是修改了上面说到的共用的内存

  2. s.age = 28;又是修改了上面的公用内存

  3. s.income = 1000又修改了公共的内存。


所以最后输出公共内存的内容,以%d的方式就是1000了。

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ylcqucc
2015-01-22 · TA获得超过1435个赞
知道小有建树答主
回答量:862
采纳率:0%
帮助的人:324万
展开全部
首先,输出的结果是:1000。//是正确的。

共用体,所有成员共享一段内存空间,在某个时刻,在该存储单元中只能存放一个数据。

从后面的赋值语句,可以看得出来,最后,在这个共用体变量对应的存储单元中存放的是1000。

所以,这个时候,你去输出。或者引用 s.age或者s.income,其结果都是1000。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式