2012-04-09 24 views
2

我對工會有疑問。假設有一個聯合定義爲如何在運行時區分c中的工會成員

union emp{ 
    float f; 
    int i; 
}; 

是否有方法可以確定使用哪個聯合字段。我所遇到的,我有,如果使用浮點型字段和打印INT如果INT場是打印浮動的情況,低脂功能可能會像事​​先

void print(union u){ 

    // if float field is initialized 
    printf("float field = %f\n",u.f); 

    // if int field is initialized 
    printf("int field = %d\n",u.i); 


} 

感謝。

回答

6

你不能只用union;通常你會將其包裝在一個包含某種標籤值的struct中。

struct val { 
    enum { EMP_INT, EMP_FLOAT } tag; 
    union emp { 
    int i; 
    float f; 
    } emp; 
}; 
1

不是真的,這取決於你實地訪問內存會被解釋爲一個floatint

你最好的選擇是使聯合部分的結構,並保持一個標誌,指示使用哪個字段。

1

您不能,信息沒有存儲在運行時的任何地方。

你可以這樣做:

struct emp { 
     enum storedValue type; 
     union { 
       float f; 
       int i; 
     } 
}; 

手動存儲類型。該枚舉然後具有像floatvalintval或類似的值。

而不是一個枚舉,你可以使用布爾類似isFloat