定义及规则
当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union)。在C Programming Language 一书中对于联合体是这么描述的:
1)联合体是一个结构;
2)它的所有成员相对于基地址的偏移量都为0;
3)此结构空间要大到足够容纳最"宽"的成员;
4)其对齐方式要适合其中所有的成员;
验证程序
#include <string>
#include <iostream>
union UUnionA
{
int iData;
double dData;
char szData[10];
};
typedef struct tagTestData
{
int iData;
double dData;
}TestData;
union UUnionB
{
char szData[5];
TestData stuData;
int iData;
};
union UUnionC
{
char szData[17];
TestData stuData;
int iData;
};
int main(int argc, char **argv)
{
std::cout << "UUnionA的大小:" << sizeof(UUnionA) << std::endl;
std::cout << "TestData的大小:" << sizeof(TestData) << std::endl;
std::cout << "UUnionC的大小:" << sizeof(UUnionC) << std::endl;
system("pause");
return 0;
}
对联合的使用,注意以下特性
#include <iostream>
using namespace std;
union test
{
int k;
struct{int x, int y,int z}a;
}b;
int main()
{
b.a.x = 1;
b.a.y = 2;
b.a.z = 3;
b.k = 0;
cout<<b.a.x<<b.a.y<<b.a.z<<endl;
return 0;
}
程序的输出结果是 023 ,而不是 123。这是因为,union是共用内存,后来的赋值0将前面的1覆盖了。