2014-09-06 19 views
1

我寫了這個簡單的程序來檢查聯合變量的內存表示。工會的內存表示

int main() 
{ 
    short s=0x7080; 
    union{ 
     char c; 
     short s; 
    }un1={s}; 
    printf(" %#X",un1.s); 
    return 0; 
} 

輸出:UN1 0x0045FE3C 80 000X80

內存中的表示。我期待它是0x0045FE3C 80 70
爲什麼變量s沒有持有'80 70'

回答

4

爲什麼變量s不是'80 70'?

因爲初始化了c而不是s。初始化假定您設置的第一要素,所以

un1 = {s}; 

的意思是「轉換schar,然後將其分配給un1.c,因爲cunion的第一要素。

如果你想分配它s,使用指定初始化:

un1 = {.s = s}; 

Demo.(打印0X7080,如預期ED)。