C/C++ union
一、概念
中文称为共用体或联合体。主要用于共享内存,在C/C++程序的编写中,当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体;当多种类型,多个对象,多个事物只取其一时(我们姑且通俗地称其为“n 选1”),我们也可以使用联合体来发挥其长处。
在“联合”中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度。应该说明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值。
二、举例
(1)用union判断大小端
union var
{
char c[4];
int i;
};
int main()
{
var data;
data.c[0] = 0x04;
data.c[1] = 0x03;
data.c[2] = 0x02;
data.c[3] = 0x11;
//数组中下标低的,地址也低,按地址从低到高,内存内容依次为:04,03,02,11。总共四字节!
//而把四个字节作为一个整体,应该从内存高地址到低地址看,0x11020304,低位04放在低地址上。
printf("%x\n",data.i);
}
结果:
11020304 //证明是小端(little-endian)
(2)含有struct的union
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);
num.half.first='a'; /*联合中结构成员赋值*/
num.half.second='b';
printf("%x/n", num.i);
}
输出结果为:
AB
6261
三、带对象的union
由于union里面的东西共享内存,所以不能定义静态、引用类型的变量。由于在union里也不允许存放带有构造函数、析构函数和复制构造函数等的类的对象,但是可以存放对应的类对象指针。编译器无法保证类的构造函数和析构函数得到正确的调用,由此,就可能出现内存泄漏。所以,我们在C++中使用union时,尽量保持C语言中使用union的风格,尽量不要让union带有对象。
转载于:https://www.cnblogs.com/chakyu/p/7411403.html
C/C++ union相关推荐
- Python type hints 之 Optional,Union
1,前言 type hint 在pep484加入,我个人觉得这种类似于类型约束的(机制)有点违背了python简单.简洁的初衷,在慢慢向c# java 这种强类型语言看齐的节奏. 不过好在不强制使用, ...
- C++ 共用体union 的使用
共用体是什么 共用体将不同的数据类型组织为一个整体, 需要注意的是,共用体在同一时刻只能存储一个数据成员的值., 共用体变量的地址和它的格式成员的地址都是同一地址 共用体的一般形式 union 共用体 ...
- 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用
二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...
- 联合体union和大小端(big-endian、little-endian)
1.联合体union的基本特性--和struct的同与不同 union,中文名"联合体.共用体",在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(s ...
- struct和union的大小问题
union类型以其中size最大的为其大小 struct类型以其中所有size大小之和为其大小 #include<iostream> using namespace std; int ma ...
- 利用c语言结构体和union实现类似c++的public,private的实现
最近在看strongswan源代码,看到strongswan的代码框架很有意思,用C语言实现类的思想.当我们编写完一个模块,我们需要提供的是H的文件给其他模块使用,我们希望H文件中就只能包含一些公有函 ...
- php union all,Union与Union All的区别
Union与Union All的区别 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并 ...
- mysql join union_MySQL中union和join语句使用区别的辨析教程
union和join是需要联合多张表时常见的关联词,具体概念我就不说了,想知道上网查就行,因为我也记不准确. 先说差别:union对两张表的操作是合并数据条数,等于是纵向的,要求是两张表字段必须是相同 ...
- C++/C union使用记一下锅
//首先,学习编程一定要记得加几个群或者加几个讨论组,因为这样你才能不断地进步还有吵架/滑稽 记一下 关于使用union结构体时遇到的一些坑 To zero-initialize an object ...
- 索引系列八--索引特性之有序难优化union
----UNION 是需要排序的 drop table t1 purge; create table t1 as select * from dba_objects where object_id i ...
最新文章
- mysql获取配置文件信息,四种获取MySQL数据库配置文件加载顺序
- 【django轻量级框架】(Python3.6.8+Django2.0)第一个Django项目与基础环境搭建
- 秀秀的森林(forest)
- jQuery Mobile学习笔记
- 七十、Vue城市页面Ajax动态渲染和兄弟组件数据传递
- java画图板代码_java学习小总结——画图板制做(附代码)
- 中文新闻分类 数据集_三亚试点用大数据推行垃圾分类:刷卡扔垃圾,分类有奖励|界面新闻...
- 全球首发!计算机视觉Polygon Mesh Processing总结9——Triangle-Based Remeshing
- ***性测试是一种特殊的信息安全服务
- 多校 HDU 6313 Hack It——构造
- MFC消息映射及消息处理函数原型
- 解决vscode下载很慢的问题
- 积分形式的詹森不等式_均值不等式及其积分形式
- xshell6上传文件到linux,xshell上传文件到虚拟机中
- 5g无线图传信号测试软件,不到千元的5G无线图传?小试致迅CineEye
- Either类java_通过实例学习Either 树和模式匹配
- 消息称:华为将官宣为全国老款手机内存扩容
- Activiti工作流(一):OA 上的那些请假流程如何快速实现呢?
- centos7下安装forever_CentOS7 安装和部分设置参考
- 8.PS-快速掌握人物祛斑
热门文章
- 增强型的for循环linkedlist_38. 为什么千万别用for循环迭代LinkedList
- 月历1997年php代码_php自动生成月历的代码
- mysql数据库用doc命令,myMySQL数据库怎么使用dos命令安装? MySQL数据库使用教程
- python 保存dataframe_在python2中将dataframe保存到CSV
- 利用Caffe训练模型(solver、deploy、train_val)+python使用已训练模型
- 如何获得查询的执行计划?(一)
- Java学习之——泛型
- JS杂谈系列-jquery-插件开发小记
- RDLC使用手册_RDLC报表部署
- 与众不同 windows phone (23) - Device(设备)之硬件状态, 系统状态, 网络状态