C语言中union的含义

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

union 联合名 {

type1 name1;

type2 name2;

……

} 联合变量名;

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


struct和union和区别:

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

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


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

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


http://blog.csdn.net/jiangnanyouzi/article/details/3158702

  1. BOOL  isBigEndian()
  2. {
  3.     union
  4.     {
  5.         int  i;
  6.         char  c;
  7.     }test;
  8.     
  9.     test.c = 2;
  10.  
  11.     return  test.i != 2;
  12. }
这里用的是union来控制这个共享布局, 有个知识点就是union里面的成员c和i都是从低地址开始对齐的

http://visionsky.blog.51cto.com/733317/151760

关于匿名联合:

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

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

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


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

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

,,你妹的,感觉还是没太明白!

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. auto:指定局部变量的存储类别,表示变量在程序执行过程自动存储和释放。 2. break:断当前循环或switch语句的执行。 3. case:在switch语句用来匹配一个常量表达式的值。 4. char:表示字符类型数据。 5. const:指定变量在程序执行不能被修改的常量。 6. continue:断当前循环的一次迭代,继续执行下一次迭代。 7. default:在switch语句当所有case语句都不匹配时执行的语句块。 8. do:标识do-while循环的开始。 9. double:表示双精度浮点数类型数据。 10. else:在if语句当条件为false时执行的语句块。 11. enum:创建枚举类型,将一些常量名组织在一起,方便阅读和编写程序。 12. extern:指定一个变量是在程序其他地方定义的外部变量。 13. float:表示单精度浮点数类型数据。 14. for:标识for循环的开始。 15. goto:跳转到程序的其他位置。 16. if:判断条件是否成立,如果成立,执行一段代码块。 17. int:表示整数类型数据。 18. long:表示长整数类型数据。 19. register:指定变量存储于CPU的寄存器,存取速度较快。 20. return:将函数的执行结果返回给调用者。 21. short:表示短整数类型数据。 22. signed:表示带符号的整数类型数据。 23. sizeof:返回变量或数据类型占用的内存字节数。 24. static:指定变量在程序执行过程始终存在,在不同函数间共用。 25. struct:创建一个结构体类型,将不同类型的变量组合在一起。 26. switch:根据表达式的值选择执行与之相关的分支。 27. typedef:给数据类型起一个新的简短的名称。 28. union:创建一个共用体类型,允许不同的变量使用相同的内存空间。 29. unsigned:表示不带符号的整数类型数据。 30. void:表示空类型数据,通常用于函数没有返回值的情况。 31. volatile:指定变量可以被随时改变,通常用于与硬件相关的编程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值