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