C++基本數據類型、結構體、類、聯合內存佔用(三)——聯合

定義及規則

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章