请问一个union型的问题

ryrx 2009-04-28 11:18:47
struct s_gg{
char *d_msg;
int d_msglen;
struct s_inf tinf;
};

struct s_inf{
int d_td;
int d_sta;
union{
struct s_so aa;
struct s_oo bb;
}d_fff;
};

如果aa和bb的结构体内属性很多,例如bb有int型数组64个。
那给bb结构体赋值的时候,是否会把之上的所有变量内存重置掉?
我觉得给bb赋值,aa的内存会被重置掉,但是像d_msglen,d_td,d_sta这种都会被重置吗?
...全文
169 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryrx 2009-04-28
  • 打赏
  • 举报
回复
可是为什么我给bb赋值后,d_msglen,d_td,d_sta这些的值都变了呢?
gao125210 2009-04-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mengde007 的回复:]
不会的;他们不属于union范围之内;在UNION内里面,二者只存在一个对象有效;
[/Quote]
up
liliangbao 2009-04-28
  • 打赏
  • 举报
回复
union就是共享一段内存,所以给bb赋值,aa的内存会被重置掉
d_msglen,d_td,d_sta这些成员都有独立内存,是不会被重置的
jackyjkchen 2009-04-28
  • 打赏
  • 举报
回复
Union只对内部元素有效
  • 打赏
  • 举报
回复
你搜下union的原理,网上就有很详细的解答啊。
zhoulehua 2009-04-28
  • 打赏
  • 举报
回复
ding
biosli 2009-04-28
  • 打赏
  • 举报
回复
1楼在理,你最好做个标志表示现在的UNION是作为那一个结构体再用。
具体的处理方式你可以参考windows的消息
biosli 2009-04-28
  • 打赏
  • 举报
回复
1楼在理,你最好做个标志表示现在的UNION是作为那一个结构体再用。
具体的处理方式你可以参考windows的消息
majun01 2009-04-28
  • 打赏
  • 举报
回复
union{ 
struct s_so aa;
struct s_oo bb;
}d_fff;

是个整体,在系统分配内存空间时会选择两个中占空间比较大的进行分配。
所以它们两个的内容会互相覆盖,但它们不会影响结构体外的其他内存块的。
cyldf 2009-04-28
  • 打赏
  • 举报
回复
union就是共享一段内存,所以给bb赋值,aa的内存会被重置掉
d_msglen,d_td,d_sta这些成员都有独立内存,是不会被重置的。
mengde007 2009-04-28
  • 打赏
  • 举报
回复
不会的;他们不属于union范围之内;在UNION内里面,二者只存在一个对象有效;
icansaymyabc 2009-04-28
  • 打赏
  • 举报
回复
非 union 就是一个房间只有一个门,union 就是给一个房间开两个门。

你往 union 的一个门里塞了东西,打开另一个门你能指望看到房间里的内容不变吗?

Sou2012 2009-04-28
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ryrx 的回复:]
这个帖先结了,另开问题帖子。谢谢各位!
[/Quote]

UP
ryrx 2009-04-28
  • 打赏
  • 举报
回复
这个帖先结了,另开问题帖子。谢谢各位!

65,210

社区成员

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

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