2014-09-10 35 views
0

在下面的代碼ç聯盟和同時分配給成員

#include<stdio.h> 
int main() 
{ 
    union myUnion 
    { 
     int intVar; 
     char charVar; 
     float floatVar; 
    }; 
    union myUnion localVar; 
    localVar.intVar = 10; 
    localVar.charVar = 'A'; 
    localVar.floatVar = 20.2; 
    printf("%d ", localVar.intVar); 
    printf("%c ", localVar.charVar); 
    printf("%f ", localVar.floatVar); 
} 

我明白,工會可以一次只持有一個值。所以當我分配char值時,int會被覆蓋,n然後當我分配floatValue時,char會被覆蓋。所以我期待着int和char變量的一些垃圾值,以及float變量的20.200000,因爲它是最後一個值。但是,下面是我得到的VS快速輸出以及GCC

1101109658 Ü 20.200001 

無法理解爲什麼浮點值被改變?

+0

如果我只能找到一個體面的一個,我會把它作爲重複關閉。你的問題與工會無關,一切都與浮點數有關。閱讀已發佈的Goldberg鏈接和[C FAQ](http://c-faq.com/fp/index.html)。 – Lundin 2014-09-10 13:40:50

回答