假設下面的代碼:
#include <stdio.h>
int main()
{
union a
{
int i;
char ch[2];
};
union a u;
u.ch[0]=3;
u.ch[1]=2;
printf("%d, %d, %d\n", u.ch[0], u.ch[1], u.i);
return 0;
}
我想知道爲什麼ch[0]
和ch[1]
低量級工會地址。在堆棧中,如果我有一個小端字節,他們應該在更高階的地址。任何人都可以解釋工會的記憶表現嗎?
此代碼的這種行爲是未定義的。請參閱http://stackoverflow.com/questions/2310483/purpose-of-unions-in-c-and-c – 2011-12-24 15:44:13
您無法從「union」的* both *成員讀取值。保羅的評論是試圖告訴你,這樣做會產生未定義的行爲。提出有關「爲什麼」的問題,您會發現某些未定義的行爲是荒謬的。 – 2011-12-24 16:06:07
@CodyGray,你覺得呢?如果位模式是該成員類型的陷阱表示,則從另一個成員讀取的內容僅爲UB。由於'char'通常沒有陷阱表示,所以這當然不是問題。 (甚至可以避免完全不必使用'unsigned char'。) – 2011-12-24 16:18:04