union 的问题

BJUTmark 2008-05-10 10:41:17
在介绍联合体的时候,课本上给出的说法是“有时候需要使几个不同类型的变量共用同一组内存单元”
我不明白,多个变量都存在同一块内存中,那么不会覆盖吗?
例如
union animal
{
int age;
char c;
float weight;
}
这个联合体在内存中占的字节数是 4,但是4个字节你要么存放 age 要么存放 weight 或者是存放c。他们3个共同使用这4个字节的内存是怎么回事。
...全文
73 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Treazy 2008-05-11
  • 打赏
  • 举报
回复
空间是固定的

东西可以任意

那拿出来的是什么东西取决于这个东西的类型
caesar_ca 2008-05-11
  • 打赏
  • 举报
回复
可以把union看作是对同一段内存的不同类型解释。例如
union mem {
int integar;
float floating;
char character;
} mem4Byte;

mem4Byte.integar 把这4字节内存当作int值来解释, mem4Byte.floating把这4字节内存当作浮点数来解释。mem4Byte.character把第一个字节解释为字符,忽略余下的3个字节。


C-style的转换是同样的意义,把内存解释为指定类型。union是语法糖,让代码更清晰。

给你一个实际使用union的例子,用来定义color。

union {
struct {
unsigned char r, g, b, a;
} rgba;
unsigned int c32;
} mRgba;
ltaoscu 2008-05-11
  • 打赏
  • 举报
回复
union 所占空间大小为其里面最大数据元素所占字节大小,这些元素共享这段内存空间,不同时候表现为不同类型,关键是看你怎么用。
BJUTmark 2008-05-10
  • 打赏
  • 举报
回复
哦 明白了,谢谢了。今天看了好多你回的问题。
matrixdwy 2008-05-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 baihacker 的回复:]
意思是在一个盒子里可以放香蕉也可以放苹果还有梨子
[/Quote]
当你想拿香蕉的时候,有可能拿出来的是苹果或梨子
当你想拿苹果的时候,有可能拿出来的是香蕉和梨子
当你想拿梨子的时候,有可能拿出来的是香蕉和苹果

当然,你可能想要拿到什么就能拿到什么,关键看你怎么拿
Jncryang 2008-05-10
  • 打赏
  • 举报
回复
但是这个盒子放东西的时候,只能放其中的一个!
baihacker 2008-05-10
  • 打赏
  • 举报
回复
意思是在一个盒子里可以放香蕉也可以放苹果还有梨子

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧