任何人都可以請解釋我爲什麼下面的代碼打印20而不是10?以下代碼的輸出.. Union
感謝
#include<stdio.h>
int main()
{
union var
{
int a, b;
};
union var v;
v.a=10;
v.b=20;
printf("%d\n", v.a);
return 0;
}
任何人都可以請解釋我爲什麼下面的代碼打印20而不是10?以下代碼的輸出.. Union
感謝
#include<stdio.h>
int main()
{
union var
{
int a, b;
};
union var v;
v.a=10;
v.b=20;
printf("%d\n", v.a);
return 0;
}
通過工會的定義是:你不能同時使用v.a
和v.b
,因爲這兩個領域共享同一個地址。引用標準:
甲聯合類型描述重疊 非空集合構件的對象,其中每個 具有任選指定 名和可能的不同類型。
在這裏,只要您分配到v.b
,就會覆蓋v.a
。在你的情況下,因爲兩個變量都具有相同的類型,所以事情不會變得很難看,但是想象一下,如果a
是一個字符例如float
和b
。
如果你的目標是讓var
是包含兩種不同int
複合變量,那麼你應該使用struct
,不union
。
聯合將足夠寬以存儲其包含的最寬類型,並且類型將共享相同的地址。如果你想a
和b
不同,請使用struct
。
C99標準,部分6.7.2.1:
工會的大小是蘇夫網絡cient包含最大的成員。在 的值中,大多數成員可以隨時存儲在聯合對象中。一個指向 聯合對象的指針,經過適當轉換後,指向其每個成員(或者如果成員是位域,則指向其所在的單位),反之亦然。
從6.5.8章節:
全部指向同一個工會對象的成員比較平等的。
聯合是一種可以使用不同類型的modifires訪問相同的內存的東西。所以在你的代碼中,第一個分配沒有多少意義,因爲第二個分配存在。它以最後一個順序影響內存,所以你得到最後的分配值。
您在發佈之前是否閱讀過'union'的定義? – ruslik 2010-11-20 15:43:50