给含有结构体变量的共用体赋值应该怎么思考,这题为什么是1 10
1个回答
展开全部
“联合”是一种特殊的类,也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,以达到节省空间的目的(还有一个节省空间的类型:位域)。 这是一个非常特殊的地方,也是联合的特征。另外,同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的值。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询