C語言聯合體(共用體)

union 共用體名{
成員列表
};

共用體有時也被稱爲聯合或者聯合體,這也是 Union 這個單詞的本意。
結構體和共用體的區別在於:結構體的各個成員會佔用不同的內存,互相之間沒有影響;而共用體的所有成員佔用同一段內存,修改一個成員會影響其餘所有成員。

結構體佔用的內存大於等於所有成員佔用的內存的總和(成員之間可能會存在縫隙),共用體佔用的內存等於最長的成員佔用的內存。共用體使用了內存覆蓋技術,同一時刻只能保存一個成員的值,如果對新的成員賦值,就會把原來成員的值覆蓋掉。

共用體也是一種自定義類型,可以通過它來創建變量,例如:
union data{
int n;
char ch;
double f;
};
union data a, b, c;
上面是先定義共用體,再創建變量,也可以在定義共用體的同時創建變量:
union data{
int n;
char ch;
double f;
} a, b, c;
如果不再定義新的變量,也可以將共用體的名字省略:
union{
int n;
char ch;
double f;
} a, b, c;
共用體 data 中,成員 f 佔用的內存最多,爲 8 個字節,所以 data 類型的變量(也就是 a、b、c)也佔用 8 個字節的內存,請看下面的演示:
#include <stdio.h>
union data{
int n;
char ch;
short m;
};
int main(){
union data a;
printf("%d, %d\n", sizeof(a), sizeof(union data) );
a.n = 0x40;
printf("%X, %c, %hX\n", a.n, a.ch, a.m);
a.ch = ‘9’;
printf("%X, %c, %hX\n", a.n, a.ch, a.m);
a.m = 0x2059;
printf("%X, %c, %hX\n", a.n, a.ch, a.m);
a.n = 0x3E25AD54;
printf("%X, %c, %hX\n", a.n, a.ch, a.m);

return 0;

}
運行結果:
4, 4
40, @, 40
39, 9, 39
2059, Y, 2059
3E25AD54, T, AD54

這篇文章在網上粘貼過來的

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