結構和聯合

2021-08-30 12:07:31 字數 1434 閱讀 7473

聯合也是一種新的資料型別,它是一種特殊形式的變數。

聯合說明和聯合變數定義與結構十分相似。其形式為:

union 聯合名

聯合變數名;

聯合表示幾個變數公用乙個記憶體位置,在不同的時間儲存不同的資料型別和不同長度的變數。

下例表示說明乙個聯合a_bc:

union a_bc

; 再用已說明的聯合可定義聯合變數。

例如用上面說明的聯合定義乙個名為lgc的聯合變數,可寫成:

union a_bc lgc;

在聯合變數lgc中, 整型量i和字元mm公用同一記憶體位置。

當乙個聯合被說明時, 編譯程式自動地產生乙個變數,其長度為聯合中最大的變數長度。

聯合訪問其成員的方法與結構相同。同樣聯合變數也可以定義成陣列或指標,但定義為指標時,也要用->符號, 此時聯合訪問成員可表示成:

聯合名->成員名

另外, 聯合既可以出現在結構內, 它的成員也可以是結構。

例如:

struct

x; }y[10];

若要訪問結構變數y[1]中聯合x的成員i, 可以寫成:

y[1].x.i;

若要訪問結構變數y[2]中聯合x的字串指標ch的第乙個字元可寫成:

*y[2].x.ch;

若寫成y[2].x.*ch;是錯誤的。

1. 結構和聯合都是由多個不同的資料型別成員組成,但在任何同一時刻,

聯合中只存放了乙個被選中的成員,

而結構的所有成員都存在。

2. 對於聯合的不同成員賦值,將會對其它成員重寫,原來成員的值就不存在了,而對於結構的不同成員賦值互不影響的。

下面舉乙個例了來加深對聯合的理解。

main() 

half;

}number;

number.i=0x4241; /*聯合成員賦值*/

printf(%c%c/n, number.half.first, mumber.half.second);

number.half.first='a'; /*聯合中結構成員賦值*/

number.half.second='b';

printf(%x/n, number.i);

getch();

}

輸出結果為

: ab

6261

從上例結果可以看出

: 當給

i賦值後

, 其低八位也就是

first和

second的值

;當給first和

second賦字元後

,這兩個字元的

ascii碼也將作為

i 的低八位和高八位。

簡單的說,就是聯合裡面的所有變數共用乙個記憶體區域,區域大小是所有變數中最大的那個。改動某乙個變數的值,其他的值也會隨之改變。

結構和聯合

char ptr ptr hello 可行 char str 32 str hello 不可行 include include include 宣告結構體 struct student student結構體名 否則是定義,不是宣告 int age char int main 初始化結構體變數 str...

結構,聯合和列舉

結構 結構的宣告格式如下 struct id 別忘了右花括號後面的分號 1.和陣列類似的是,結構變數可在定義時初始化,如 struct id tae 同樣的,這種初始化只能在定義時進行。若在定義之後的地方進行,編譯器會報錯 但可用匿名結構進行快速賦值,如 struct id tae tae 錯誤 t...

C 結構和聯合

結構與聯合體是c語言中就已經存在的資料型別。c 語言對它們進行了擴充套件,最大的變化是允許在結構和聯體中定義成員函式。1 include2 using namespace std 3struct room 7struct student 14 15int main 17 student s 18,8...