共用體union的妙用
union主要是將各種類型的數(shù)據(jù)存放在一段固定的存儲器中,存儲器的大小由union中需要最大存儲器的數(shù)據(jù)類型決定。比如:
union student
{
char ***;
int age;
long number;
double score;
};
其中l(wèi)ong、double需要16個字節(jié),而char 只需要1個字節(jié),因此該共用體占用16個字節(jié)。union的關(guān)鍵是不同的數(shù)據(jù)類型共用存儲器。
主要的運(yùn)用:
1、確定CPU的模式:大端、小端模式確定
大小端不同,則存儲的方式也存在差別,比如int需要4個字節(jié),而char只需要1個字節(jié),根據(jù)1個字節(jié)所在的具體位置即可判定CPU的模式
union TestCPU
{
int i;
char ch;
};
void testCPUMode(void)
{
union TestCPU Test;
Test.i = 1;
if(Test.ch == 1)
{
//這個CPU是小端模式
}
else
{
//這種情況下就是大端模式
}
}
2、實現(xiàn)不同數(shù)據(jù)之間的類型轉(zhuǎn)換
union Type
{
int i;
char ch;
long lint;
....
};
...
union Type type;
這樣各種類型的數(shù)據(jù)共用存儲空間,很方便的實現(xiàn)了不同數(shù)據(jù)類型之間的轉(zhuǎn)換,不需要顯示的強(qiáng)制類型轉(zhuǎn)換。
union相比struct更加的節(jié)省空間。
3、寄存器的定義,實現(xiàn)整體的訪問和單項的訪問。
struct register
{char a;
char b;
char c;
char d;
};
union Register
{
struct register;
int whole;
};
這樣就能實現(xiàn)單項和整體的訪問,特別是引入位域操作等相關(guān)結(jié)構(gòu)以后,能夠?qū)崿F(xiàn)每一個bit的訪問。
其他的優(yōu)勢需要總結(jié),我暫時寫這三點(diǎn)了。
評論