C 語言共用體(Union)
在本教程中,您将學習C語言程式設計中的共用體。更具體地說,如何建立共用體(聯合體),通路其成員以及了解共用體與組織之間的差異。共用體又被稱為聯合體, 和結構體同屬于C語言資料類型中的結構類型。
共用體是一種特殊的資料類型,允許您在相同的記憶體位置存儲不同的資料類型。您可以定義一個帶有多成員的共用體,但是任何時候隻能有一個成員帶有值。共用體提供了一種使用相同的記憶體位置的有效方式。
union也是一種使用者定義的類型,類似于C中的struct,除了一個關鍵字的差別。結構體配置設定足夠的空間存儲其所有成員,而共用體配置設定空間僅存儲最大的成員。
如何定義共用體?
我們使用union關鍵字定義共用體。這是一個執行個體:union car
{
char name[50];
int price;
};
上面的代碼定義了派生類型union car。
建立union變量
定義共用體後,它将建立使用者定義的類型。但是,沒有配置設定記憶體。要為給定的聯合類型配置設定記憶體并使用它,我們需要建立變量。
這是我們建立聯合變量的方法。union car
{
char name[50];
int price;
};
int main()
{
union car car1, car2, *car3;
return 0;
}
建立聯合變量的另一種方法是:union car
{
char name[50];
int price;
} car1, car2, *car3;
在這兩種情況下,都會建立union car類型的union變量car1、car2和union指針car3。
通路共用體成員
我們使用.運算符來通路共用體的成員。要通路指針變量,我們還使用->運算符。
在上面的示例中,要通路car1的價格(price),請使用car1.price。
要通路car3的價格(price),可以使用(* car3).price或car3-> price。
共用體與結構體之間的差別
讓我們以一個執行個體來說明共用體與結構體之間的差別:#include
union unionJob
{
//定義 union
char name[32];
float salary;
int workerNo;
} uJob;
struct structJob
{
char name[32];
float salary;
int workerNo;
} sJob;
int main()
{
printf("union 的大小 = %d 位元組", sizeof(uJob));
printf("\nstruct 的大小 = %d 位元組", sizeof(sJob));
return 0;
}
輸出結果union 的大小 = 32 位元組
structure 的大小 = 40 位元組
為什麼聯合變量和結構變量的大小存在這種差異?
在這裡,sJob大小為40個位元組,因為name[32]的大小是32個位元組
salary的大小是4個位元組
workerNo的大小是4個位元組
但是,uJob大小為32個位元組。這是因為聯合變量的大小将始終是其最大元素的大小。在上面的示例中,其最大元素(name[32])的大小為32個位元組。
使用共用體,所有成員共享相同的記憶。
示例:通路共用體會員#include
union Job {
float salary;
int workerNo;
} j;
int main() {
j.salary = 12.3;
//當j.workerNo被指派時,
// j.salary将不再保留12.3
j.workerNo = 100;
printf("薪水 = %.1f\n", j.salary);
printf("勞工人數 = %d", j.workerNo);
return 0;
}
輸出結果薪水 = 0.0
勞工人數 = 100