C語言(共用體型別)

鋸齒流沙發表於2017-12-27

定義

用同一段記憶體單元存放不同型別的變數;

使幾個不同的變數共享同一段記憶體的結構,稱為 “共用體” 型別的結構。

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();
}
複製程式碼

最後一次賦值有效

執行結果.png

共用體型別資料的特點

1、同一個記憶體段可以用來存放幾種不同型別的成員,但在每一瞬時只能存放其中一個成員,而不是同時存放幾個;

2、可以對共用體變數初始化,但初始化表中只能有一個常量;

3、共用體變數中起作用的成員是最後一次被賦值的成員,在對共用體變數中的一個成員賦值後,原有變數儲存單元中的值就取代;

4、共用體變數的地址和它的各成員的地址都是同一地址;

5、不能對共用體變數名賦值,也不能企圖引用變數名來得到一個值;

6、C99允許用共用體變數作為函式引數;

7、共用體型別可以出現在結構體型別定義中,也可以定義共用體陣列。反之,結構體也可以出現在共用體型別定義中,陣列也可以作為共用體的成員。

相關文章