C語言如何使用共用體結構

2021-10-19 22:12:31 字數 854 閱讀 6998

共用體union型別,與結構體struct型別很相似。兩者的區別在於,結構體型別的空間是結構體型別成員所佔空間之和,而共用體型別的空間是其成員中占用空間最大的成員空間大小。對於結構體,它可以同時給所有成員賦值,而對共用體,在每一瞬間只能存放其中乙個成員的內容。利用共用體,我們能夠簡化結構體型別在描述成員屬性高度相似的結構體構造。

例如下例,我們要構造乙個結構體陣列,存入一名學生和一名老師的資訊,但學生和老師的區別在於學生的屬性中有一項「班級」,而老師的屬性中有一項「職務」,除此之外二人其他屬性相同。如果不使用共用體,我們需要構造兩個結構體型別來存入,但利用共用體,我們可以將這樣「二選一」的問題簡化。

**如下:

#include

struct

category;

}person[2]

;int

main()

printf

("\n");

printf

("no. name *** job class/position\n");

for(i=

0;i<

2;i++

)return0;

}

由程式可見,在輸入完工作型別之後我們可以進行判斷,如果是學生,則共用體型別中選用「班級」,如果是老師,則共用體型別中選用「職位」。共用體型別可以巢狀在結構體型別中,同理,結構體型別也能巢狀在共用體型別中。

需要注意的是,共用體型別在每一瞬時只能存放其中乙個成員,在本例中,當我們為共用體賦值「501」時,其實無論是輸出「clas」還是「position」,結果都是與「501」對應的資料(在不同型別下的表示)。而當下一次給共用體賦值的時候,這個資料就被覆蓋掉了。

C 結構體共用體

12 c 中陣列初始化的特點 初始話陣列可以省略等號 初始話內容為空 不可縮窄操作 double people double people int number 不通過,因為浮點到整形為縮窄13 sizeof 計算陣列時候會比strlen 多計算乙個0位元組 14 字串的初始化和賦值,string ...

C語言陣列結構體共用體雜記

一維陣列 a i a i 多維陣列 以此類推 5.陣列名是常量,不能被賦值改變!6.在陣列初始化中,如果給部分位置初始化賦值,其它位置自動置為0 7.在字元型陣列中,printf不能列印帶有空格的字串 8.與字元陣列有關的函式 strlen 計算字串個數,但不包括 0 用sizeof來計算的話是包括...

c語言的結構體 共用體 列舉

struct s var struct s var1 結構體本身的開頭和結尾位址都是4位元組的整數倍 var2 結構體本身的開頭和結尾位址都是4位元組的整數倍 var3 結構體本身的開頭和結尾位址都是4位元組的整數倍 由此可見,元素的安放順序非常講究 offsetof type,member typ...