首页 > 编程知识 正文

union是可数还是不可数,union的动词和形容词形式

时间:2023-05-05 19:27:27 阅读:143873 作者:1233

本文总结了union的使用方法。

定义:union是“相似”和“结构”的联合体,联合体所有成员都引用内存中的相同位置,最大成员的内存长度为union的内存大小。 union主要用于节省空间,默认权限是公共的。

注意点:

)1)可以使用同一个内存段存储几种不同类型的成员,但每个时间点只能存在一个,并且不能同时存储多个成员。 这意味着每个时刻只有一个成员起作用,其他成员不起作用,不能同时存在和起作用。

)2)在联合变量中起作用的成员是最后一个存储的成员,存储在新成员中后,原始成员将不再起作用。 这意味着所有数据成员都有相同的开始地址。

1.union的内存分配

# includeiostreamusingnamespacestd; union Node{ struct{ int a; char b; (t; int c; }Obj; struct{ int a; char b; (CT; intmain(intargc,char *argv[] ) cout'sizeof(obj )='sizeof ) obj ) endl; cout'sizeof(CT )='sizeof ) CT ) endl; //上的等于Obj.t.a=10; Obj.t.b=97; Obj.c=20; cout'Obj.t.a='Obj.t.aendl; cout'obj.t.b='int(obj.t.b ) endl; cout'Obj.c='Obj.cendl; 返回0; }输出结果:

union类Node的内存布局如下。

从执行结果可以看出,sizeof(Obj的大小与sizeof(ct的大小相同)。 也就是说,union内存大小以最大成员的内存大小作为自己的内存大小。 另外,由于Obj.t.a=Obj.c的union共享内存,变量t和c从相同的起始地址存储,因此Obj.c涵盖了Obj.t.a的值,因此输出结果如上所示。

2.union可以测试CPU的大小端

union Node{ int a; char c; }Obj; intmain(intargc,char *argv[] ) { Obj.a=1; if(obj.c==1) cout'Little'endl; else cout'Big'endl; 返回0; }上类Node的内存布局如下。

原因:对于小端序:

仓库:从小到大

a 01 00 00 00

c 01

大端模式时

仓库:从大到小

a 00 00 00 01

c 00

所以可以判断是什么样的模式。

3. union 和 struct的区别

)1) union和struct都由多个不同的数据成员组成,但union的所有成员共享内存地址,只存储最后分配的成员值,而struct可以存储,因此成员具有值。

)2) union的大小是所有成员中占用最大内存的成员的大小,其中struct是所有成员大小的“和”。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。