前些日子,有朋友問我 union
是什麼?我左思右想,終於在大腦最偏僻的角落中找到了他的影子。在語法結構上,他與 struct
類似,都是使用者自定義的資料結構。但union
與 struct
差別最大的地方,就在於 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