65.【C语言】联合体

目录

目录

1.定义

2.格式

3.例题

答案速查

分析

4.练习

答案速查

分析

5.相同成员的联合体和结构体的对比

6.联合体的大小计算

2条规则

 答案速查

分析

练习

答案速查

分析

7.联合体的优点

8.匿名联合体


1.定义

和结构体有所不同,顾名思义:所有成员联合使用同一块内存空间,因此也叫共用体

注:编译器只为最大的成员分配足够的内存空间;如果不符合对齐数,则会增加一部分空间(有关联合体的大小计算见第6点)给联合体其中一个成员赋值,其他成员的值也跟着变化

2.格式

union 联合体标签
{//......
};

3.例题

求下列代码的执行结果

#include <stdio.h>
union U
{char a;int b;
};int main()
{printf("%zd\n", sizeof(union U));union U u;printf("%p\n", &u);printf("%p\n", &u.a);printf("%p", &u.b);return 0;
}

答案速查

d4118c9946ba4652ad1c468a86b830dc.png

分析

01.printf("%zd\n", sizeof(union U));

编译器只为最大的成员分配足够的内存空间

char a 对齐数为1,int b对齐数为4(注:联合体对齐数的计算方法同结构体的),因此为a和b分配4字节的空间

02.printf("%p\n", &u); & printf("%p\n", &u.a); & printf("%p", &u.b);

所有成员联合使用同一块内存空间,因此取地址的结果一样

4.练习

求下列代码执行后,联合体在内存中存储的数据

#include <stdio.h>
union U
{char a;int b;
};int main()
{union U u;u.b = 0x12345678;u.a = 0x99;return 0;
}

答案速查

VS2022按小端序存储

因此为99 65 43 21

分析

运行环境x86+debug

下断点(F9)至u.a = 0x99;,内存窗口输入&u

b9e13e41a08b461a9d4da5df5afd1d63.png

执行至return 0;

90a02df542a140eeac5840f939cea39a.png

5.相同成员的联合体和结构体的对比

union U
{char a;int b;
};struct S
{char a;int b;
};

 

ac2dc47ab413436b94608d0967af1600.png025ef410d82543c893989cd7d66fa485.png

6.联合体的大小计算

2条规则

1.联合的大小至少是最大成员的大小

2.当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍(多数人往往会忽视第2点)

例如:

求下列代码的执行结果

#include <stdio.h>
union U
{char a[5];int b;
};int main()
{printf("%zd", sizeof(union U));return 0;
}

 答案速查

8ed448d2452149db8085ca5330e76076.png

分析

如果不考虑第二点规则,答案应该是5

如果考虑第二点规则,

char a[5]; 自身对齐数:1,VS默认对齐数:8,所以对齐数为1

int b; 自身对齐数:4,VS默认对齐数:8,所以对齐数为4

a[5]与b的最大对齐数为4

所以联合体的大小至少为4的整数倍(4,8,12,...,4k),大于5且最近的4整数倍的数为8

练习

求下列代码的执行结果

#include <stdio.h>
union U
{short a[7];int b;
};int main()
{printf("%zd", sizeof(union U));return 0;
}

答案速查

05214c9e024a433b9710d8eb6dc37303.png

分析

short a[7]; 自身对齐数:2,VS默认对齐数:8,所以对齐数为2

int b; 自身对齐数:4,VS默认对齐数:8,所以对齐数为4

如果不考虑第二点规则,答案应该是14(7*2=14)

如果考虑第二点规则,short a[7];与int b;的最大对齐数为4,所以联合体的大小至少为4的整数倍(4,8,12,...,4k),大于14且最近的4整数倍的数为16

7.联合体的优点

如果一些变量既有公共属性,又有各自的联合属性,可以把公共属性单独写出来,剩余属于各自本身的属性使用联合体起来(联合体内嵌结构体)

这样可以节省空间

8.匿名联合体

同匿名结构体,见文63.【C语言】再议结构体(上)

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VS code user setting 与 workspace setting 的区别

VS code user setting 与 workspace setting 的区别 引言正文引言 相信有不少开始接触 VS code 的小伙伴会有疑问,user setting 与 workspace setting 有什么区别呢?这里我们来说明一下 正文 首先,当我们使用 Ctrl + Shift + P 打开搜索输入 setting 后,可以弹出 4 个se…

【2023工业3D异常检测文献】M3DM: 基于混合融合的多模态工业异常检测方法

Multimodal Industrial Anomaly Detection via Hybrid Fusion 1、Background 随着3D传感器的发展&#xff0c;最近发布了具有2D图像和3D点云数据的MVTec-3D AD数据集&#xff0c;促进了多模态工业异常检测的研究。 无监督异常检测的核心思想是找出正常表示与异常之间的差异。…

Android Studio Dolphin 中Gradle下载慢的解决方法

我用的版本Android Studio Dolphin | 2021.3.1 Patch 1 1.Gradle自身的版本下载慢 解决办法&#xff1a;修改gradle\wrapper\gradle-wrapper.properties中的distributionUrl 将https\://services.gradle.org/distributions为https\://mirrors.cloud.tencent.com/gradle dis…

2024 maya的散布工具sppaint3d使用指南

目前工具其实可以分为三个版本 1 最老的原版 时间还是2011年的&#xff0c;只支持python2版的maya 2 作者python3更新版 后来作者看maya直到2022上还是没有类似好用方便的工具&#xff0c;于是更新到了2022版本 这个是原作者更新的2022版本&#xff0c;改成了python3&#…

SpringBoot——基础配置

但是还需要删除pom.xml中的标签——模板的文件也同样操作 banner的选项——关闭 控制台 日志 banner图片的位置——还会分辨颜色 在 Java 的日志框架&#xff08;如 Logback、Log4j2 等&#xff09;中&#xff0c;logging.level.root主要用于设置根日志记录器的日志级别…

IIS开启后https访问出错net::ERR_CERT_INVALID

安装ArcGIS server和portal等&#xff0c;按照说明上&#xff0c;先开启iis&#xff0c;在安装server、datastore、portal、webadapter等&#xff0c;遇到一些问题&#xff1a; 问题1 访问http正常&#xff0c;访问https出错&#xff1a; 解决方案 从这里找到解决方案&…

TDesign组件库+vue3+ts 如何视觉上合并相同内容的table列?(自定义合并table列)

背景 当table的某一列的某些内容相同时&#xff0c;需要在视觉上合并这一部分的内容为同个单元格 如上图所示&#xff0c;比如需要合并当申请人为同个字段的列。 解决代码 <t-table:data"filteredData":columns"columns":rowspan-and-colspan"…

宝塔部署vue项目出现的各种问题

使用宝塔面板&#xff0c;网站页面&#xff0c;构建php静态网页 问题一&#xff1a;图片等静态资源无法加载 找到真正请求的url&#xff0c; 然后在项目目录下面创建对应的目录&#xff0c;将资源放入 问题二&#xff1a;刷新出现404 在这里任意位置添加 ## 添加上这个配…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-28目录前言1. Cognitive phantoms in LLMs through the lens of latent variables摘要研究背景问题与挑战创新点算法模型实验效果…

业务封装与映射 -- AMP BMP GMP

概述 不同单板支持不同的封装模式&#xff0c;主要包括: AMP (Asynchronous Mapping Procedure&#xff0c;异步映射规程)BMP (Bit-synchronous Mapping Procedure&#xff0c;比特同步映射规程)GMP (Generic Mapping Procedure&#xff0c;通用映射规程) AMP/BMP&#xff1a…

解决VS Code工具在终端执行命令的时候无法加载文件

错误&#xff1a;tsc : 无法加载文件 E:\KTSP\WaitForMe\install\nodejs\node_global\tsc.ps1,因为在此系统上禁止运行脚本 问题原因&#xff1a;由于windwos11上默认上关闭了运行脚本的策略&#xff0c;所以我们要设置允许执行脚本 1.WinX打开终端管理员输入 Get-ExecutionP…

【每天学个新注解】Day 10 Lombok注解简解(九)—@Accessors

在之前的几天&#xff0c;我们系统学习了Lombok的常见注解&#xff0c;并且将其官网stable中的所有注解都讲解了一编&#xff0c;接下来会通过两到三天的时间将Lombok目前正在试验的&#xff08;experimental&#xff09;注解简单过一遍&#xff0c;以下为experimental状态的所…

uniapp框架中实现文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间

前言 uni-file-picker是uniapp中的一个文件选择器组件,用于选择本地文件并返回选择的文件路径或文件信息。该组件支持选择单个文件或多个文件,可以设置文件的类型、大小限制,并且可以进行文件预览。 提示:以下是本篇文章正文内容,下面案例可供参考 uni-file-picker组件具…

学习记录:js算法(五十):二叉树的右视图

文章目录 二叉树的右视图我的思路网上思路 总结 二叉树的右视图 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 图一&#xff1a; 示例 1:如图一 输入: [1,2,3,null,5,null,4] …

SigmaStudio控件Cross Mixer\Signal Merger算法效果分析

衰减与叠加混音算法验证分析一 CH2:输入源为-20dB正弦波1khz CH1叠加混音&#xff1a;参考混音算法https://blog.csdn.net/weixin_48408892/article/details/129878036?spm1001.2014.3001.5502 Ch0衰减混音&#xff1a;外部多个输入源做混音时&#xff0c;建议参考该算法控件&…

开源模型应用落地-模型微调-语料采集-数据标注(二)

一、前言 在自然语言处理(NLP)的快速发展中,语料采集作为基础性的步骤显得尤为重要。它不仅为机器学习模型提供了所需的训练数据,还直接影响模型的性能和泛化能力。随着数据驱动技术的不断进步,如何有效并高效地收集、清洗和整理丰富多样的语料,已成为研究者和工程师们亟…

PostgreSQL 17 发布了!非常稳定的版本

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…

数据管理_DM的实现

DataManager 的实现 DataManager 是数据库系统中的核心组件&#xff0c;负责管理底层数据的访问、修改和事务处理。它是 DM 层直接对外提供方法的类&#xff0c;用来对上层其他模块提供数据操作的API的,同时也实现了对 DataItem 对象的缓存管理。DataItem 存储的 key 是由页号…

Web认识 -- 第一课

文章目录 前言一、HTML是什么&#xff1f;二、了解Web1. 基本概念2.Web标准3. Web构成1.前端1. HTML2.CSS3. javaScript4.常见浏览器介绍 2.Web标签构成1.结构标准2.表现标准 -- css3. 行为标准 -- javaScript 总结 前言 这里是我们进入前端学习的开端,在本次更新之后我会陆续…

【智能算法应用】正余弦优化算法求解二维路径规划问题

摘要 正余弦优化算法&#xff08;Sine Cosine Algorithm, SCA&#xff09;是一种新颖的群体智能优化算法&#xff0c;能够有效地求解复杂的非线性问题。在本研究中&#xff0c;我们将SCA应用于二维路径规划问题&#xff0c;以找到从起点到终点的最优路径&#xff0c;同时避开障…