定義及規則
當多個數據需要共享內存或者多個數據每次只取其一時,可以利用聯合體(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覆蓋了。