联合union
在过去内存受限的时候(最大才64M),C++中有一个功能允许多个变量共享同相同的内存(显然不能同时使用),我们称之为联合。
如下例子:
union Rsize
{
double longth;
float width;
int height;
} myuser;
即联合中的三个变量共用一块内存。 Rsize为联合类型的名称,myuser为此种类型的变量。
也可以不同时声明变量:
union Rsize
{
double longth;
float width;
int height;
} ;
在变量产生之前,并没有内存分配,这和类是一样的。
如果不指明联合的名字,即下面这种方式:
union
{
double longth;
float width;
int height;
} ;
就是匿名联合。我们一般不这样用,因为你在访问里面的变量时会分不清是申请的变量还是联合中的成员变量。
因为联合中的成员是共用内存,故联合的内存大小即为最大类型的大小。在此例中 double占用8个字节,而float和int只是4个字节,故这个联合的最大空间为8字节。
联合中同时只能使用一个成员变量,因为当用某个变量时,它会占用此内存,其它的都不能占用。
访问联合变量时也是变量类型加点号,如: myuser.longth=3.6;
注:声明实例时,只能初始化联合的第一个成员。
你会看它他们占用的内存情况。
#include <iostream>
using namespace std;
union Rsize
{
double longth;
float width;
int height;
} myuser;
void main()
{
myuser.longth=20;
cout<<myuser.longth
<<endl
<<myuser.width
<<endl
<<myuser.height
<<endl;
}
显示结果: