C/C++:[4]如何使用共用體(union)?

共用體(union)是一種資料格式,它能夠儲存不同型別的資料,但是隻能同時儲存其中的一種型別。

C/C++:[4]如何使用共用體(union)

工具/原料

Microsoft Visual Studio 2012(或其他版本)

一、共用體的宣告

共用體的語法和結構體的類似,共用體宣告格式如下:

union uninType

{

int fourByte;

char oneByte[4];

};

定義結構後,就可以建立這種型別的變量了:

uninType Test1;

uninType Test2;

二、共用體的使用1

假如有定義:

uninType Test;

test.fourByte=2;

cout << (int)test.oneByte[0] << endl;

會輸出顯示什麼?這裡涉及到儲存大小端模式的問題,答案見步驟2

有如下程式碼:

test.fourByte=2;

cout << (int)test.oneByte[0] << endl;

if (test.oneByte[0] == 2)

cout << "Little endian!" << endl;

else

cout << "Big endian!" << endl;

這個程式碼能測試CPU的大小端模式,我使用Intel CORE i3,win7 OS得到輸出如下:

2

Little endian!

C/C++:[4]如何使用共用體(union)

三、共用體的使用2

在嵌入式系統開發中,有時需要將一些變數儲存在EEPROM中,變數型別若是char、int就很好辦,可是如果要儲存float、double型別的變數怎麼辦呢?

這個問題可以用共用體解決:

union myfloat

{

char i[4];

float j;

}Test;

因為float是四個位元組,因此我們定義一個4個元素的char陣列和float公用一段記憶體,接下來就是EEPROM存取了

在程式中要使用 j 的地方使用Test.j就行了,

想把 j 存入EEPROM可以這樣:

EEPROM_WRITE(0,myfloat.i[0]);

EEPROM_WRITE(1,myfloat.i[1]);

EEPROM_WRITE(2,myfloat.i[2]);

EEPROM_WRITE(3,myfloat.i[3]);

注:上面引數0、1、2、3為EEPROM地址,上面的EEPROM_WRITE只是示意,有時需要對地址使用(void*)進行型別轉換

想把 j 從EEPROM讀出可以這樣:

myfloat.i[0]=EEPROM_READ(0);

myfloat.i[1]=EEPROM_READ(1);

myfloat.i[2]=EEPROM_READ(2);

myfloat.i[3]=EEPROM_READ(3);

然後在程式中繼續使用Test.j就可以了

是不是很簡單呢

注意事項

共用體常用來節省記憶體,特別是一些嵌入式程式設計,記憶體是非常寶貴的!

共用體也常用於作業系統資料結構或硬體資料結構!

資料, 大學, 型別, 資料格式,
相關問題答案