C語言筆記 2- Union 和大小端

參考文檔:http://c.biancheng.net/view/2035.html

union (聯合體)和 struct(結構體) 的用法較爲類似,不同在於:

  1. union 所有成員共用一段內存,其佔用內存總等於內部最大成員所佔用的內存大小,修改一個成員會影響所有成員(即共用體使用了內存覆蓋技術,同一時刻只能保存一個成員的值,如果對新的成員賦值,就會把原來成員的值覆蓋掉);
  2. 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 的全部數據。

在大端模式機器中,各個成員在內存中的分佈如下:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章