天天看點

C語言UNION結構大小的問題

union結構體的大小取決于最大的變量長度。

例如:

#include <iostream>
#include <string>
using namespace std;
union one //傳回最大的變量4位元組
{
	int a;
	char b;
};
union two //傳回最大的變量1位元組
{
	char a;
	char b;
};
union myt	//傳回最大的name 16位元組 因為記憶體對齊
{
	char name[13];
	int age;
};
union four	//傳回最大的name 13位元組
{
	char name[13];
};
int main()
{
	cout<<sizeof(one)<<endl;
	cout<<sizeof(two)<<endl;
	//共用體的長度取決于最大值的長度
	//也就是name   同時因為記憶體對齊的原因
	//隻能取4的倍數,是以傳回16
	cout<<sizeof(myt)<<endl;
	cout<<sizeof(four)<<endl;
	return 0;
}
           

這裡尤其要注意一下關于union中含有字元串數組的時候的長度。當僅僅隻有char str[]數組時,長度不變,但是如果char str[]中還含有其他位元組變量時,應該要采用記憶體對齊的方式來計算總長度。

文章來自www.itbuluoge.com