天天看點

java c語言union轉換_C 語言共用體(Union)

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