結構體和共用體

2021-10-01 07:30:53 字數 793 閱讀 5105

通過前面的講解,我們知道結構體(struct)是一種構造型別或複雜型別,它可以包含多個型別不同的成員。

在c語言中,還有另外一種和結構體非常類似的語法,叫做共用體(union),

它的定義格式為:

union 共用體名;

共用體有時也被稱為聯合或者聯合體,這也是 union 這個單詞的本意。

結構體和共用體的區別在於:結構體的各個成員會占用不同的記憶體,互相之間沒有影響;而共用體的所有成員占用同一段記憶體,修改乙個成員會影響其餘所有成員。

結構體占用的記憶體大於等於所有成員占用的記憶體的總和(成員之間可能會存在縫隙),共用體占用的記憶體等於最長的成員占用的記憶體。共用體使用了記憶體覆蓋技術,同一時刻只能儲存乙個成員的值,如果對新的成員賦值,就會把原來成員的值覆蓋掉。

共用體也是一種自定義型別,可以通過它來建立變數,例如:

union data;union data a, b, c;
上面是先定義共用體,再建立變數,也可以在定義共用體的同時建立變數:

union data a, b, c;
如果不再定義新的變數,也可以將共用體的名字省略:

union a, b, c;
共用體 data 中,成員 f 占用的記憶體最多,為 8 個位元組,所以 data 型別的變數(也就是 a、b、c)也占用 8 個位元組的記憶體,

請看下面的演示:

#include union data;

int main()

共用體和結構體

共用體和結構體的宣告與初始化的格式不同。宣告 struct or union new st 初始化 new st 和陣列一樣,使用逗號分隔,並用花括號括起。也可以全放在一行。可以同時完成定義結構和建立結構變數的工作,只需要將變數名放在結束括號的後面 struct or union new st ne...

結構體和共用體

宣告結構和結構體變數 include include define maxtitl 41 define maxautl 31 define max 100 結構宣告 並未建立實際的資料物件 也稱結構宣告為模板 struct bookbok int main 復合字面常量 bk1 struct boo...

結構體 共用體

結構體 結構體的定義1 struct mystruct 定義新變數 struct mystruct s1 結構體定義2 typedef struct mystruct mstrct 定義新變數 mstrct s1 結構體定義3 type struct mstrct 定義新變數 mstrct s1 共...