定義
用同一段記憶體單元存放不同型別的變數;
使幾個不同的變數共享同一段記憶體的結構,稱為 “共用體” 型別的結構。
1、不同型別的變數共同佔用一段記憶體(相互覆蓋),聯合變數任何時刻只有一個成員存在,節省記憶體
2、聯合體變數的大小=最大的成員所佔的位元組數
定義共用體型別變數的一般形式
union 共用體名
{
成員表列
}變數表列;
union Data
{
int i;
char ch;
float f;
}a, b, c;
union Data
{
int i;
char ch;
float f;
};
union Data a, b, c;
複製程式碼
注意
結構體變數所佔記憶體長度是各成員佔的記憶體長度之和,每個成員分別佔有其自己的記憶體單元。而共用體變數所佔的記憶體長度等於最長的成員的長度。
引用共用體變數的方式
只有先定義了共用體變數才能引用它,但應注意,不能引用共用體變數,而只能引用共用體變數中的成員。
union Data{
int i;
float f;
double d;
char* ch;
};
void main(){
union Data data;
data.i = 1;
data.f = 1.2;
data.d = 1.23;
data.ch = "xiaoming";
printf("int:%d\n",data.i);
printf("float:%f\n",data.f);
printf("double:%lf\n",data.d);
getchar();
}
複製程式碼
最後一次賦值有效
共用體型別資料的特點
1、同一個記憶體段可以用來存放幾種不同型別的成員,但在每一瞬時只能存放其中一個成員,而不是同時存放幾個;
2、可以對共用體變數初始化,但初始化表中只能有一個常量;
3、共用體變數中起作用的成員是最後一次被賦值的成員,在對共用體變數中的一個成員賦值後,原有變數儲存單元中的值就取代;
4、共用體變數的地址和它的各成員的地址都是同一地址;
5、不能對共用體變數名賦值,也不能企圖引用變數名來得到一個值;
6、C99允許用共用體變數作為函式引數;
7、共用體型別可以出現在結構體型別定義中,也可以定義共用體陣列。反之,結構體也可以出現在共用體型別定義中,陣列也可以作為共用體的成員。