给含有结构体变量的共用体赋值应该怎么思考,这题为什么是1 10

 我来答
ring_year
2015-01-03 · TA获得超过1425个赞
知道小有建树答主
回答量:632
采纳率:80%
帮助的人:537万
展开全部

“联合”是一种特殊的类,也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,以达到节省空间的目的(还有一个节省空间的类型:位域)。 这是一个非常特殊的地方,也是联合的特征。另外,同struct一样,联合默认访问权限也是公有的,并且,也具有成员函数。


回到问题,z只有一个空间长度12个字节。其内部z.x 与 z.y.a指向的是同样的区域。后面第二次赋值会覆盖第一次赋值。


举例说明:

#include<iostream>
using namespace std;

union{
    int x;
    struct{
    int a,b,c;
    }y;
}z;
int main()
{
    z.x = 5;
    cout<<"z address:"<<&z<<endl;
    cout<<"z.x address:"<<&z.x<<endl;
    cout<<"z.y.z address:"<<&z.y.a<<endl;
    cout<<"z.y.b address:"<<&z.y.b<<endl;
    cout<<"z.y.c address:"<<&z.y.c<<endl;

    z.y.a = 1;
    z.y.b = 2;
    z.y.c = 3;
    cout<<z.x<<endl;
    cout<<z.y.a<<endl;
    return 0;
}

更多追问追答
追问
那为什么答案不是3
追答
首先,建议认真看下我的回答。
补充,赋值如下:
z.y.a & z.x = 1
z.y.b = 2
z.y.c =3
内存空间如此排布。程序也说明了地址空间的排布。
z.y.c与z.x不是一个地方,对z.y.c=3赋值,自然不会影响到z.x的值。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式