參考文檔:http://c.biancheng.net/view/2035.html
union (聯合體)和 struct(結構體) 的用法較爲類似,不同在於:
- union 所有成員共用一段內存,其佔用內存總等於內部最大成員所佔用的內存大小,修改一個成員會影響所有成員(即共用體使用了內存覆蓋技術,同一時刻只能保存一個成員的值,如果對新的成員賦值,就會把原來成員的值覆蓋掉);
- struct 每個成員佔用自己的內存空間,其佔用內存大於等於所有成員佔用的內存之和,成員之間不會互相影響。
Union(聯合體)的定義格式爲:
union unionName{
type1 elemName1;
type2 elemName2;
...
typen elemNameN;
};
N個成員共享 union unionName 所定義的變量的內存。
舉個例子:
union 在內存中的分佈要結合大小端來理解:
以上面的 data 爲例,在小端機器中,各個成員在內存中的分佈如下:
成員 n、ch、m 在內存中“對齊”到一頭,對 ch 賦值修改的是前一個字節,對 m 賦值修改的是前兩個字節,對 n 賦值修改的是全部字節。也就是說,ch、m 會影響到 n 的一部分數據,而 n 會影響到 ch、m 的全部數據。
在大端模式機器中,各個成員在內存中的分佈如下: