2011-05-30 82 views
2

我有一個結構鑄字

structure { 
    int a; 
    char b; 
} st; 

有沒有辦法來強制轉換結構構件st.a? 因爲在一些地方,我希望它爲int並在幾個地方,我希望它爲Char*

+2

在這種情況下,它們不應該是兩個不同的結構嗎? – Naveen 2011-05-30 06:36:55

+0

在發佈任何代碼或代碼相關的關鍵字之前,使用代碼部件作爲花括號出現。 – 2011-05-30 06:37:17

+1

請注意:在大多數64位平臺上,你可能會遇到一個'int'不足以容納'char *'或任何其他指針類型,所以使用相同的字段來保存這兩種類型的值可能會贏得結果不好。 – 2011-05-30 06:39:27

回答

10

我建議使用union

struct { 
    union { 
    int a; 
    char *ptr; 
    } u; 
    char b; 
} st; 

根據該sizeof(int) == sizeof(char*)持有的假設,您可以通過使用st.u.ast.u.ptr訪問內存中的值相同。

對於什麼值得,請考慮使用size_t而不是int作爲a字段的類型。這樣,您的代碼在64位版本中仍然是正確的(其中int可能仍然是32位,但指針是64位)。

+2

標準C不接受匿名工會。 GCC確實。 – 2011-05-30 07:10:37

+0

@Jonathan:謝謝你澄清這一點;我修復了代碼示例。對於它的價值,Microsoft Visual Studio 2008(我現在可以訪問的編譯器)也樂意接受C代碼中的匿名聯合。 – 2011-05-30 13:03:18

+0

標準C現在接受匿名聯合(C11!) – u0b34a0f6ae 2013-01-22 22:47:27