結構體是將乙個物件(記憶體空間)解釋為c語言中多種型別的綜合.
聯合是將乙個物件(記憶體空間)在不同時候解釋為c語言中不同的型別.
// 聯合
typedef union firstuniontag firstunion
union firstunion ;
firstunion myunion;
使用 myunion.f 時, fi所佔記憶體中的內容將被解釋為乙個float數; 當使用 myunion.i 時, fi所佔記憶體中的內容將被解釋為乙個int型別.
可以對聯合進行初始化, 但是初始值必須是聯合第乙個成員的型別.
// 聯合初始化
// 聯合
typedef union firstuniontag firstunion
union firstunion ;
firstunion myunion = 3.1415;
變體記錄可以看作聯合的公升級版, 變體記錄中聯合成員是比int float更為複雜的結構.
考慮下面的情況:
倉庫儲存兩種貨物, 一種是零件(part), 一種是裝配件(subassembly), 裝配件由一些零件組成. 乙個零件資訊包括零件成本, 零件**商編號; 乙個裝配件資訊包括組成裝配件的零件數, 以及零件資訊. 顯然, 倉庫的一條存貨記錄(inventory)可能是零件, 也可能是裝配件, 並且包含入庫日期和操作員編號, 可以用變體記錄實現.
// 零件
struct partinfo ;
// 裝配件
struct subassyinfo ;
// 存貨記錄
struct invrec type;
union info;
} record;
我們可以通過以下方式訪問存貨記錄record.
record.oper 獲取存貨操作員編號
if(record.type == part) (存貨為零件, info為info.part) record.info.part.cost獲取存貨零件成本 record.info.part.supplier 獲取存貨零件**商編號
if(record.type == subassy)(存貨為裝配件, info為info.subassy)record.info.subassy.n_parts 獲取存貨裝配件包含零件數
record.info.subassy.parts[0].cost 獲取存貨裝配件第乙個零件的成本
C語言中的聯合體 (記錄)
在c語言中,一種和結構體非常類似的語法,叫做共用體 union 它的定義格式為 union 共用體名 結構體和共用體的區別在於 結構體的各個成員會占用不同的記憶體,互相之間沒有影響 而共用體的所有成員占用同一段記憶體,修改乙個成員會影響其餘所有成員。結構體占用的記憶體大於等於所有成員占用的記憶體的總...
c語言 union聯合體
linux中聯合體union實現判斷little endian 和 big endian 大端和小端 1 聯合體的資料成員從低位元組開始對齊 2 little endian 和 big endian。little endian 和 big endian 是 cpu 存放資料的兩種不同順序。對於整型 ...
C語言之聯合體
聯合體,就是將幾種資料型別聯合起來的一種資料結構,但是它們共用乙個空間。怎麼理解呢?川劇變臉見過沒,就是來來回回的變來變去,給人看的眼花繚亂的,但是不管你怎麼變,面具下的臉卻始終不變。同樣的道理,各種資料型別就是各種臉譜,對外展現了不同的形象,唯一不變的就是它的記憶體空間的二進位制資料始終都是一樣的...