C++ union联合体
union即联合体,在一个联合体可以定义多种不同的数据类型, 一个被声明为该联合类型的变量中允许装入该联合所定义的任何一种数据,这些数据共享同一段内存,以达到节省空间的目的。union变量所占用的内存长度等于最长的成员的内存长度。
先看一个关于struct的例子:
struct student
{char mark;long num;float score;
};
其struct的内存结构如下,sizeof(struct student)的值为12bytes。
下面是关于union的例子:
union test
{char mark;long num;float score;
};
sizeof(union test)的值为4。因为共用体将一个char类型的mark、一个long类型的num变量和一个float类型的score变量存放在同一个地址开始的内存单元中,而char类型和long类型所占的内存字节数是不一样的,但是在union中都是从同一个地址存放的,也就是使用的覆盖技术,这三个变量互相覆盖,而这种使几个不同的变量共占同一段内存的结构,称为“共用体”类型的结构。
因union中的所有成员起始地址都是一样的,所以&a.mark、&a.num和&a.score的值都是一样的。
不能如下使用:
union test a;
printf("%d", a); //错误
由于a的存储区有好几种类型,分别占不同长度的存储区,仅写共用体变量名a,这样使编译器无法确定究竟输出的哪一个成员的值。
printf("%d", a.mark); //正确
C++ union联合体相关推荐
- c# union结构体_P/Invoke各种总结(八、在C#中使用Union联合体)
Union联合体(共用体) 这里稍微简单介绍一下union这种类型. 有时候需要使几种不同类型的变量存放到同一段内存单元中,例如:可把一个整型变量.一个字符串变量放在同一个地址开始的内存单元中.以上两 ...
- 关于UNION联合体结构的运用
为什么80%的码农都做不了架构师?>>> 当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union).在C Programming Language 一书中 ...
- STM8学习笔记---union联合体的应用
平时用单片机编写程序经常会遇到将一个16位数拆封为两个8位数,或者将将两个8位数组成一个16位数.如: data = data_h * 256 + data_l; data_h = data / 25 ...
- C语言union联合体中不同类型变量读取同一地址数据问题
有下列代码 #include<stdio.h>union {int a[2];long b;char c[4]; }s;int main() {s.a[0]=0x12345678;s.a[ ...
- C/C++计算类/结构体和联合体(union)所占内存大小(内存对齐问题)
目录 一,内存对齐的三条规则 二,注意事项: 三,举例说明 1,示例1 2,示例2 3,示例3 4,示例4 四,联合体(union) 五,字节对齐的原因 六,计算练习 一,内存对齐的三条规则 数据成员 ...
- C语言联合体union详解与实例
目录 定义 类型定义 变量定义 存储规则 通过联合体获取存储大小端 和结构体类似,联合体(union)是C语言中一种自定义数据类型.联合体中可以定义多个类型的成员变量,但所有成员共享同一块内存区域,所 ...
- 联合体c语言指针,C++中联合体(union)的使用
typedef union para { double tmp[]; struct { double a; double b; double c; double d; }NP; }NPara; //或 ...
- c语言struct_Introduction to CSAPP(十七):复杂数据组织与C语言的 struct与union
如果说数组是同一种类型的数据的连续排列的数据组织形式,那么对于不同类型的数据来说,他们被有机组织起来的方式有两种,分别是struct和union. Struct C语言的 struct 创建一种数据类 ...
- C++结构体,联合体与枚举类
结构体: C++的结构体可以理解为C语言结构体的升级版,也可以理解为特殊的类,很少用,目的是和C语言保持兼容 与类的唯一区别是:类中的成员如果定义在类体的最开头,既没有访问属性(缺省访问),则默认是私 ...
最新文章
- 如何高性能的给UIImageView加个圆角
- between and 效率_香港城市大学吕坚教授Adv. Funct. Mater.: 铁基金属玻璃在工业废水处理上再次突破,实现催化效率与稳定性双提升...
- Codeforces 1025 题解
- 【90】沟通:跨部门管理
- Django套用现成模板,导入css,js,images等文件【转】
- 数据结构与算法:十大排序算法之插入排序
- 机器学习︱非平衡数据处理方式与评估
- iCollections 7 for Mac(桌面整理工具)
- 【解决】Windows Mobile 6 Professional SDK Refresh.msi 在xp上一直卡死
- TST扫描电镜与透射电镜有什么不同?
- Android 关机时的radio相关关闭流程
- 搜狗输入法无法输出中文
- 测试成长方程01:费曼技巧
- 计算机管理员注销,肿么注销计算机管理员
- 计算机考研380分能上什么学校,考研总分500考380难吗 能上什么学校
- 希尔排序的思路及实现解析
- 大数据实战项目------中国移动运营分析实时监控平台 || 项目背景
- 【githubshare】KCon 黑客大会演讲 macOS Big Sur 内核漏洞挖掘、云虚拟化安全、服务器硬件可信与安全实践
- 虚拟机配置静态IP时,ens33不显示ip解决方法
- 三恒矿用计算机,三恒KJ70N-WG矿用本安型无线网关
热门文章
- 如何编码实现NTFS格式下删除文件的恢复
- Ambari——大数据平台的搭建利器之进阶篇
- UML统一建模语言学习总结
- Qt界面设计之Action的使用
- 如何用计算机算分数指数幂,第三章冪函数指数函数及其图像3.1指数和幂概念的推广.doc...
- java模拟加速匀速减速_步进电机加速-匀速-减速运行程序(C51源程序)
- WiFi之网络时间同步
- Linux 网络流量监控利器 iftop 中文入门指南
- js 锚点定位的2种简单方法
- hpunix java环境变量_HP_UX 库环境变量设置