Re: [問題] structure與union的差別?
※ 引述《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)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章