union是C++中一个类,平时自己用的比较少,了解了一些特性后觉得在内存要求比较高的地方还是大有可为,总结一下。

C++中的struct和union内部都可以定义 数据 和 函数, 两个跟 class不同的地方在于访问控制上面,class默认为private,struct和union默认为public.

联合体的特点在于:

1、几个变量共用一个内存位置,每一时刻都只有一个变量存在(想一个瓶子一样,可以放一瓶水和一瓶咖啡,但每次只能有一种存在)

2、求共用体变量的大小:a.保证能存在最长的那个变量;b.考虑内存对齐时,共用体变量的大小是 类型最大的变量 的整数倍。

eg.

union foo/*“共用”类型“FOO”*/
{
chars[]; /*“字符”类型的数组“S”下面有“10”个元素*/
int i; /*“整数”类型i*/
};

在这个union中,foo的内存空间的长度为12,是int型的3倍,保证恰好能放下数组的长度10。

另外要注意的是,union的成员不可以为静态、引用,他们的内存位置与栈中变量有差别。

共用体和结构体有下列区别:
1. 共用体和结构体都是由多个不同的数据类型成员组成, 但在任何同一时刻, 共用体只存放了一个被选中的成员, 而结构体的所有成员都存在。
2. 对于共用体的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构体的不同成员赋值是互不影响的。
#include <stdio.h>
 void main()
 {
  union number{ /*定义一个联合*/
 int i;
 struct
 { /*在联合中定义一个结构*/
 char first;
 char second;
 }half;
 }num;  num.i=0x4241; /*联合成员赋值*/
 printf("%c%c\n", num.half.first, num.half.second); //AB  num.half.first='a'; /*联合中结构成员赋值*/
 num.half.second='b';
 printf("%x\n", num.i); //6261  getchar();
 }

最新文章

  1. 快速理解-Ajax
  2. 浏览器访问Servlet
  3. java8入门 错误:找不到或者无法加载主类
  4. bzoj 2938 AC自动机
  5. ​adb server is out of date. killing解决方法
  6. [译]SpringMVC自定义验证注解(SpringMVC custom validation annotations)
  7. Eclipse maven工程 Missing artifact com.sun:tools:jar:1.5.0:system 解决方法
  8. MFC 在对话框显示图片的多种方法(四种方法)
  9. 分享下mac安装xamarin跨平台开发环境的坑
  10. C#异步的世界【上】
  11. MySQL性能优化之参数配置
  12. LeetCode 599. Minimum Index Sum of Two Lists (从两个lists里找到相同的并且位置总和最靠前的)
  13. 二进制中连续k个1-题解
  14. Spring Boot 项目实战(六)集成 Apollo
  15. Django - Python3 常用命令
  16. 腾讯云JavaWeb环境配置
  17. Sql语法高级应用之五:使用存储过程实现对明细多层次统计
  18. 20155218 《Java程序设计》实验五(网络编程与安全)实验报告
  19. 【Java】CSVUtils
  20. java类中访问属性

热门文章

  1. hibernate4学习
  2. Mac Pro 利用PHP导出SVN新增或修改过的文件
  3. PHP的继承方法如何获取子类名?get_class() 和 get_called_class()
  4. Linux设置Memcached开机启动
  5. java基础知识(三)java关键字
  6. 【安卓】aidl.exe E 10744 10584 io_delegate.cpp:102] Error while creating directories: Invalid argument
  7. MySQL SQL优化
  8. Maven 入门 (1)—— 安装
  9. Vue in 2016
  10. SQL操作记录查看工具