C/C++ 联合体

目录

联合体概述

联合体的内存分配

联合体大小计算


联合体概述

联合与结构非常的相似,主要区别就在于联合这两个字。

联合的特征:联合体所包含的成员变量使用的是同一块空间。

联合体定义

//联合类型的声明
union Un
{
	char c;
	int i;
};
//联合变量的定义
union Un un;

这与结构体很相像,但是当我们计算一下它的大小时:

结果是 4。如果它是结构体的话,那么结果应该是 8。

联合体的内存分配

有这样一个联合体类型:

union Un
{
	char c;
	int i;
	double  n;
};
 
union Un un;//定义变量

我们采用暴力的方法,直接打印un每个成员的地址看看:

int main()
{
	union Un un;
	printf("%p\n", &un);
	printf("%p\n", &un.c);
	printf("%p\n", &un.i);
	printf("%p\n", &un.n);
	return 0;
}

运行之后

它们的起始地址都相同,也就说明他们所用的其实就是同一块空间 。

这也就意味着,我们要改变任何一个成员变量的值,都会改变另外两个成员变量的值。

例如:现在un的i中存入0x11223344

int main()
{
	union Un un;
	un.i = 0x11223344;
	return 0;
}

然后改变un的c的值,看看内存如何变化:    un.c = 0x55;

联合体大小计算

联合的大小至少是最大成员的大小。

当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。

union Un1
{
	char c[5];
	int i;
};
union Un2
{
	short c[7];
	int i;
};
//下面输出的结果是什么?
printf("%d\n", sizeof(union Un1));
printf("%d\n", sizeof(union Un2));

结果如下:8  16

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/301488.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PAT 乙级 1049 数列的片段和

分数 20 作者 CAO, Peng 单位 Google 给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列 { 0.1, 0.2, 0.3, 0.4 },我们有 (0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) …

VSD Viewer for Mac Visio绘图文件阅读器

Visio Viewer for Mac是一款专为Mac用户设计的Visio文件查看工具。它允许用户在Mac上查看和共享Visio文件,无需安装微软的Visio软件。这对于那些没有购买或没有访问Windows操作系统的Mac用户来说,是一个非常方便的选择。 该软件支持Visio的各种文件格式…

五行能量,影响着你的运势,莫小看!

五行的能量不能小看,时时刻刻在影响着我们。五行为聚之成形,散之成气;五行学说讲的是能量与气场,它指出世界有五种元素:金、水、木、火、土,这代表世界的五种不同的能量。五行能量存在于我们的身边&#xf…

分析抖音直播弹幕评论和礼物的websocket数据流信息,通过proto协议解析消息内容思路

现在定位到一个解析的大概位置: e.decode function(e, t) {e instanceof o || (e o.create(e));for (var n, i, s void 0 t ? e.len : e.pos t, u new r.webcast.im.MemberMessage(r.webcast. 通过请求找到发送请求的js代码位置,然后通过跟踪这…

Halcon机器视觉和运动控制软件通用框架,24年1月最新版新增UI设计器,插件式开发,开箱即用 仅供学习!

24年1月更新 下载点我 此版本已经添加ui设计器。具体功能如上所示,可以自定义变量,写c#脚本,自定义流程,包含了halcon脚本和封装的算子,可自定义ui,通过插件形式开发很方便拓展自己的功能。 ui设计器

Web前端-JavaScript(BOM)

文章目录 1.1 常用的键盘事件1.1.1 键盘事件1.1.2 键盘事件对象1.1.3 案例一 1.2 BOM1.2.1 什么是BOM1.2.2 BOM的构成1.2.3 window1.2.4 window对象常见事件窗口/页面加载事件**第1种****第2种** 调整窗口大小事件 1.2.5 定时器setTimeout() 炸弹定时器停止定时器**案例&#x…

数据采集卡技术参数一览!

数据采集卡主要技术参数有如下几个指标: (1)通道数:即板卡可以采集几路信号,分为单端和双端(差分)。常用的有单端32路/差分16路、单端16路/差分8路。 (2)数据采集卡采样…

简单易懂的PyTorch线性层解析:神经网络的构建基石

目录 torch.nn子模块Linear Layers详解 nn.Identity Identity 类描述 Identity 类的功能和作用 Identity 类的参数 形状 示例代码 nn.Linear Linear 类描述 Linear 类的功能和作用 Linear 类的参数 形状 变量 示例代码 nn.Bilinear Bilinear 类的功能和作用 B…

Mudbox 各版本安装指南

​Mudbox下载链接 https://pan.baidu.com/s/1cYcITQ7OeI5PadNdXur_bA?pwd0531 1.鼠标右击【Mudbox2024(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)【解压到 Mudbox2024(64bit)】。 2.打开解压后的文件夹,双击打开【Setup】…

cuttag和chip-seq的区别?

Cut&Tag(Cleavage Under Targets and Tagmentation)和ChIP-Seq(Chromatin Immunoprecipitation Sequencing)都是用于研究蛋白质与DNA相互作用的生物技术。它们在技术原理和应用方面有一些关键的区别。 1.ChIP-Seq测序 1.1 …

C语言scanf()函数详解

目录 1. scanf()函数简介 1.1 函数原型 1.2 头文件 1.3 返回值 1.4 参数 2.格式说明符 3.输入格式控制 关于‘ * ’赋值忽略符的例子 关于width域宽的例子 关于length长度修饰符的说明 4. 其他常见问题说明 4.1 scanf(&#xf…

【蓝桥杯软件赛 零基础备赛20周】第7周——二叉树

文章目录 1 二叉树概念2 二叉树的存储和编码2.1 二叉树的存储方法2.2 二叉树存储的编码实现2.3 二叉树的极简存储方法 3 例题4 习题 前面介绍的数据结构数组、队列、栈,都是线性的,它们存储数据的方式是把相同类型的数据按顺序一个接一个串在一起。简单的…

污水处理成套设备如何选择

污水处理是现代社会中不可或缺的一个重要环节,它涉及到环保领域,与人们的生活和健康息息相关。而污水处理成套设备的选择则显得尤为重要,因为合适的设备能够有效地解决水污染问题,提高环境质量。 在选择污水处理成套设备时&#x…

DRF-源码解析-3-权限流程:drf的权限源码解析,drf的权限流程。

一、代码的准备 视图: class TestAPIView(APIView):authentication_classes[MyJWTAuthentication]permission_classes [AdminPermission,]def get(self,request)return Respponse({code:200,msg:测试通过})路由: path(test/,views.TestAPIView.as_vi…

Weblogic安全漫谈(三)

本篇介绍coherence.jar中的漏洞利用链及后续绕过。 经历2015到2018的3年迭代后,Weblogic的黑名单逐渐完善,废掉CC反序列化更是釜底抽薪。另一方面也促使研究员去挖掘新组件新利用链,这篇介绍的就是testbnull在发现Spring写文件链后[1]&#…

spring boot支付宝沙箱环境测试支付功能

目录 一、安装支付宝支付demo 二、配置demo信息 三、配置回调地址和异步地址 四、内网穿透 (一)简介 (二)使用场景 (三)内网穿透的几个常用软件 (四)使用natapp 一、安装支付…

ckplayer如何设置键盘的方向左和方向右是快退或快进多少秒?

默认是20秒,那怎么按照自定义的配置呢? 打开文件:“.\ckplayer\js\ckplayer.js” 然后在下面的函数中修改就可以了: 下面的代码我已经修改为了按一次方向左键为快退3秒,按一次方向右键为快进5秒。 /** fastBack* 功能&…

第03章_运算符与流程控制

第03章_运算符与流程控制 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 本章专题脉络 1. 运算符(Operator) 运算符是一种特殊的符号,用以表示数据的运算、赋…

DevOps搭建(十五)-kubernetes部署项目详细步骤

1、k8s简介 k8s官网地址 https://kubernetes.io/zh-cn/docs/home/ 2、安装kuboard 详细步骤可参考官网 https://kuboard.cn/install/install-k8s.html 2.1、环境准备 至少 2 台 2核4G 的服务器。 选择v1.19,因为高版本的已经把docker给舍弃掉了。 https://k…

Vue3插件开发教程:步步指导如何编写Vue3插件

关注⬆️⬆️⬆️⬆️ 专栏后期更新更多前端内容 文章目录 Vue3 插件插件注册形式插件主要的场景使用插件Vue3 插件 插件 (Plugins) 是一种能为 Vue 添加全局功能的工具代码。 插件注册形式 一个插件可以是一个拥有 install() 方法的对象,也可以直接是一个安装函数本身。 i…
最新文章