一道題明白什麼是共用體
- 2019 年 11 月 21 日
- 筆記

關於共用體(聯合體)的概念,感覺很多同學還是不夠清楚的。上面這個全國二級C的選擇,難度不大,但能很好的幫助我們理解這個概念。
正確答案是D。
為了便於理解,我們最後加了行程式碼(最後注釋掉的程式碼)。運行,輸出三個值。

經常會聽到同學講共用體某個成員存在,另一個不存在,一個成員的值覆蓋了另一個成員,這些都是不準確的。共用體講的就是成員共用存儲空間的,涉及到不同成員與該共用體所佔存儲空間的對應關係。
大家應該都知道,結構體變數占的空間大小等於每個成員所佔空間大小之和,共用體變數占的空間大小等於所有成員裡面占空間最大的那個。
對於題目中共用體a的兩個成員u、k,u有三個int類型的成員共佔12位元組,k只佔4位元組,所以總歸給a分配了12位元組的空間。下圖展示了成員與這12位元組空間的對應關係。

我們把這12位元組分成3塊,每塊4位元組。對於成員u,它的三個成員分別對應這3塊。對於成員k,它只需要4位元組,也就是第一塊,和x是同一塊。所以給k賦值,就相當於給x賦值了。
類似的,如果k是double類型,佔8個位元組,那k對應x、y兩塊,給k賦值會影響到x、y,具體x、y的值要看k前後4個位元組分別是什麼值。當然一般不會讓大家計算這麼複雜的情況。

