**:
使用c語言時,常常使用struct,對於union型別卻幾乎沒有用過,只知道它是聯合型別,各欄位共享一塊記憶體,實際應用中卻不知道它的具體用途。
今天讀《程式設計卓越之道》中看到有對其使用的簡單介紹,記錄在此:
首先摘錄一下struct和union的重要區別:
struct為每個欄位在不同的偏移處分配儲存空間,而聯合則將所有的字段重疊在記憶體中的相同偏移處。
聯合型別的用途:
1、建立別名。別名是記憶體物件原名之外的其他名字。比如在程式中經常會用到將乙個資料型別強制轉換為另乙個型別,這個操作可以使用聯合來代替。
比如typedef unioncharofunion v;可以通過v.u來操作乙個uint32型別的物件,當需要將uint32變數的低端位元組看做乙個字元的時候,只需要訪問v.c就可以了。
實際應用中,大多數的協議結構定義中,都會使用union型別來定義。
2、使用聯合來將較大的物件分解成組成這個物件的各個位元組。(尤其在微控制器程式設計中將float拆解成char)
typedef unionasbytes composite;
可以使用composite.bytes陣列來訪問composite.u欄位的各個位元組。
**:一直以來,union都是個很少用到的東西,對於這些不常用的結構往往記不住。這次看書又看到了,還是學習一下吧。
一般在windows api的一些資料結構中才能看到這個union,其實並不複雜。本質上來說和結構體是一樣的,但是從包裝的角度來看有差異。
1、union中可以定義多個成員,union的大小由最大的成員的大小決定。
2、union成員共享同一塊大小的記憶體,一次只能使用其中的乙個成員。
3、對某乙個成員賦值,會覆蓋其他成員的值(也不奇怪,因為他們共享一塊記憶體。但前提是成員所佔位元組數相同,當成員所佔位元組數不同時只會覆蓋相應位元組上的值,比如對char成員賦值就不會把整個int成員覆蓋掉,因為char只佔乙個位元組,而int佔四個位元組)
#include
typedef uniondemo;
int main(int argc, char **argv)
C語言中Union型別的使用方法
使用c語言時,常常使用struct,對於union型別卻幾乎沒有用過,只知道它是聯合型別,各欄位共享一塊記憶體,實際應用中卻不知道它的具體用途。今天讀 程式設計卓越之道 中看到有對其使用的簡單介紹,記錄在此 首先摘錄一下struct和union的重要區別 struct為每個欄位在不同的偏移處分配儲存...
C語言中union的含義
union是一種資料型別,跟struct型別有點類似,其形式為 union 聯合名 聯合變數名 聯合表示幾個變數共用乙個記憶體位置,在不同的時間儲存不同的資料型別和不同的資料長度。當乙個聯合被說明時,編譯程式自動的產生乙個變數,其長度為聯合中最大的變數長度。聯合成員的訪問方法跟結構的一樣。struc...
C語言中的自定義型別 union共用體
共用體union和結構體struct在型別定義 變數定義 使用方法上很相似。舉個栗子 include struct my struct union my union int main int argc,char ar 輸出 0x7ffdeebbfd50 0x7ffdeebbfd54.0x7ffdee...