當定義結構物件時,如果沒有顯式地初始化它們,則會採用一般初始化規則:如果該結構物件屬於動態儲存型別,那麼其成員具有不確定的初始值。另一方面,如果結構物件具有靜態儲存週期,那麼其非指標成員初始值是 0,其指標成員初始值是空指標。
不同於結構成員——它們在結構中都具有單獨的記憶體位置,聯合成員則共用同一個記憶體位置。也就是說,
聯合中的所有成員都是從相同的記憶體地址開始。因此,可以定義一個擁有許多成員的聯合,但是同一時刻只能有一個成員允許含有一個值。聯合讓程式設計師可以方便地通過不同方式使用同一個記憶體位置。
定義聯合(union)
聯合的定義方式與結構是一樣的,只是把關鍵字 struct 改成 union:
union [標籤名稱]{成員宣告列表};
下面的例子定義了一個名為Data的聯合型別,它有 3 個成員:i、x 和 str:
union Data { int i; double x; char str[16]; };
這種型別的物件可以儲存一個整數、一個浮點數或一個短字串。下面的宣告定義了一個 union Data 型別的物件 var 和一個 unionData 型別的陣列 myData,它有 100 個元素(聯合的空間大小為它最大成員的空間大小):
union Data var, myData[100];
如果想獲得聯合的空間大小,可以使用 sizeof 運算子。對上例來說,sizeof(var)會返回 16,而 sizeof(myData)則返回 1600。
如圖 1 所示,聯合中所有成員都是從記憶體中同一個地址開始的。
圖 1