c语言问题 公用体

程序如下:

输出的结果是:1000

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

问题:
上面这句话应该怎么理解?
实际在计算机内存中是怎么运行的?

在你上面那个例子中 联合体的char类型 他实际在内存中的字节数是4个字节

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

所占内容小的要扩张 因为4个字节的类型不可能缩小 所以内存直接为char分4个字节的内存
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-01-22

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


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


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


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

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

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

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


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

本回答被提问者采纳
第2个回答  2015-01-22
首先,输出的结果是:1000。//是正确的。

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

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

所以,这个时候,你去输出。或者引用 s.age或者s.income,其结果都是1000。
相似回答