设为首页 加入收藏

TOP

C语言中union的含义
2014-11-24 02:29:30 来源: 作者: 【 】 浏览:0
Tags:言中 union 含义

union是一种数据类型,跟struct类型有点类似,其形式为:


union 联合名 {


type1name1;


type2name2;


……


} 联合变量名;


联合表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同的数据长度。当一个联合被说明时,编译程序自动的产生一个变量,其长度为联合中最大的变量长度。联合成员的访问方法跟结构的一样。


struct和union和区别:


1.结构和联合都是由多个不同的数据类型成员组成的,但是在任一时刻联合只存放一个被选中的成员,而结构的所有成员都存在。


2。对于联合的不同成员赋值,将会对其他成员重写,原来成员的值就不存在了,而对结构的不同成员赋值是会不影响的。



对联合变量的赋值,都只能对变量的成员进行,一个联合变量每次只能赋值给一个成员,一个联合变量的值就是当前联合变量的某一个成员值。


应该说明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值。


这里用的是union来控制这个共享布局,有个知识点就是union里面的成员c和i都是从低地址开始对齐的。


关于匿名联合:


匿名联合的成员名不能与同一个作用于内的其它变量名冲突。


由于匿名联合不使用点运算符,所以包含在匿名联合内的元素必须是数据,不允许有成员函数,


也不能包含私有或受保护的成员,还有全局匿名联合必须是静态的,否则就必须放在匿名名字空间里。


联合里面的成员共享内存,所以静态、引用(由于不能共享内存)都不能用。


联合里面不允许存放带有构造函数、析构函数、复制拷贝操作符等类,因为他们共享内存,编译器无法保证这些对象不被破坏,也无法保证离开时能调用析构函数。


感觉还是没太明白!


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇联合(union)用法 下一篇DM6437-读写DDR测试过程

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: