作者UNARYvvv (有趣生活)
看板C_and_CPP
标题Re: [问题] structure与union的差别?
时间Wed Dec 21 23:28:48 2005
※ 引述《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)
1F:推 upo:谢谢~有解决到我的问题了!!! 12/22 00:07
※ 编辑: UNARYvvv 来自: 140.129.20.3 (12/22 12:45)