2011-03-07 145 views
0
void display_binary_float(unsigned int ui) { 
    union { 
    unsigned int ui; 
    float f; 
    } uif2; 
    uif2.ui = ui; 
    printf("binary: %08X float: %g\n", uif2.ui, uif2.f); 
} 

1)什麼是工會?出於某種原因,沒有手動輸入。無法在Google上找到文檔。這是什麼語法:union {}?

2)爲什麼uif2在功能結合的結束?它不應該是像union uif2 {}或這是一個C的東西?

+3

你搜索了什麼?我發現了一個很好的參考搜索「聯盟c」。這是一個完全標準的C語言功能。 – 2011-03-07 21:09:07

+2

「c編程聯盟」 – Strawberry 2011-03-07 21:10:04

+1

您的谷歌必須被打破。我也爲您的搜索提供了一整頁的相關結果。 – 2011-03-07 21:11:19

回答

1

Wikipedia,它說:

在C和C++,無標記工會是 表達幾乎完全一樣 結構(結構),不同之處在於每個 數據成員開始於在存儲器中的相同 位置。

我確定無論你有什麼工具的文檔都會告訴你關於工會的所有信息,但你還沒有找到那個部分。

0

這是一個C關鍵字,像枚舉或結構。聯合基本上是一種將同一空間中的幾種類型的變量分層的方法。在任何體面的C參考文獻中查看它。

0

工會表示unsigned int的UI和漂浮F是共享相同的存儲空間。

1

一個聯盟可以讓你把一個內存塊不同的變量/變量類型。每個變量共享相同的內存,並且聯合使用的內存總量是最大成員使用的數量。

訪問聯合成員完全按照您訪問結構成員的方式完成。但是,雖然結構包含每個都包含自己的內存的成員,但聯合中的成員共享相同的內存,因此一個或多個成員可能無效。

很顯然,你不能將多個值存儲在一個工會。但是,對於一種情況下需要一種數據類型而另一種情況下需要另一種數據類型的情況,它提供了一種便捷的方式來存儲其中一種不同的數據類型。

1

要回答你的問題(2),uif2變量聲明與一個類型,碰巧是一個聯盟。工會沒有名字,所以稱爲「匿名」工會。你可以做同樣的struct,太:

struct { 
    int a; 
    char *b; 
} foo; 

聲明一個變量稱爲foo其中有一個類型的給定struct的。

0

採用union得到了很好的覆蓋。

您的語法問題的答案是union { unsigned int ui; float f; }是一種類型,union與成員uif。在初始化中,值確實在變量名後面,但這是一個定義而不是初始化。