Re: [問題] structure與union的差別?

看板C_and_CPP (C/C++)作者 (有趣生活)時間19年前 (2005/12/21 23:13), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
※ 引述《upo (其實我不多話...)》之銘言: : 都是用來處理新的資料結構 : 請問差別在那邊呢?? 基本上是這樣: struct s { int a; double d; }; ┌─┬───┐ s: │a │ d │ └─┴───┘ ╰sizeof(s) ╯ 不過嚴格說起來,d 並不一定會正好接在 a 後面 也就是說 sizeof(s) 不一定是 sizeof(a)+sizeof(d) 中間可能會隔一些 bytes,用來讓下個資料成員對齊到某位址上 有時要考慮 compiler 對於資料成員的對齊方式 (要自己更改也是可以) ===== union u { int a; double d; }; ┌─┬─┐ u: │a │ │ ├─┴─┤ │ d │ └───┘ ╰ ╯ sizeof(u) 一個 union 的大小,是所有內含變數型態最大一個的大小 所以如果假設 double 比 int 大,那上面 sizeof(u) = sizeof(d) 而 a 和 d 的起始位址一樣,所以空間是共用的 好處是可以省一點空間,缺點是要另外記錄這個共用空間現在的意義 例如之後要用是要以 double 來解釋這塊共用空間的內容 或者以 int 來解釋... 用錯的話,程式多半就會不正常了,因為拿到的資料格式不對 ===== 另外還有其他的差別,例如有些東西是不能放在 union 之中的.. 建議直接去查資料 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.70.137.117 ※ 編輯: UNARYvvv 來自: 61.70.137.117 (12/21 23:34)

12/22 00:07, , 1F
謝謝~有解決到我的問題了!!!
12/22 00:07, 1F
※ 編輯: UNARYvvv 來自: 140.129.20.3 (12/22 12:45)
文章代碼(AID): #13gN3-a2 (C_and_CPP)
文章代碼(AID): #13gN3-a2 (C_and_CPP)