C 語言中的 union 是什麼?

pp253
Oct 6, 2018

--

前些日子,有朋友問我 union 是什麼?我左思右想,終於在大腦最偏僻的角落中找到了他的影子。在語法結構上,他與 struct 類似,都是使用者自定義的資料結構。但unionstruct 差別最大的地方,就在於 union 結構中的各變數是共用記憶體位置。這是什麼意思呢?來看以下範例。

透過上面的例子,可以發現當 un.f 被設值後, un.i 的值就不對了。事實上,那就是 10.25 的 float 型態二進位值,直接用 int 的方式去解析,所以顯示了一個像是亂數的值。也因為這種特性,當你要故意讓 C 語言以錯誤的型別去讀取資料時[1],你可以透過 union 幫助你。

union 的大小,就是 union 結構中型態的最大值,如果 union 中宣告了一個 short (2 bytes),和一個 double (8 bytes),那這個 union 的大小就會是 8 bytes。

如果你覺得這篇有幫助到你,請不忘大力拍手~

參考資料

[1] 這篇提供了這種方法的實作方式,儘管不推薦這樣做 https://stackoverflow.com/a/20151860

--

--

pp253

Google SWE / 清大工業工程碩士。原本只是分數到了所以讀工工,但發現這裡是個讓程式、資料分析和產業完美結合的地方,意外實用(賺錢)的系所。