【C语言基础】结构体中内嵌联合体|联合体中内嵌结构体

news/2024/5/3 7:07:17/文章来源:https://blog.csdn.net/weixin_51244852/article/details/133934377

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】
📢:文章若有幸对你有帮助,可点赞 👍 收藏 ⭐不迷路🙉
📢:内容若有错误,敬请留言 📝指正!原创文,转载请注明出处

文章目录

  • 一、结构体中内嵌联合体
    • 1.1 意义
    • 1.2 案例
  • 二、联合体中内嵌结构体
    • 2.1 意义
    • 2.2 案例


一、结构体中内嵌联合体

1.1 意义

使用结构体中内嵌联合体的好处是可以在一个数据结构中灵活地存储和处理不同类型的数据。下面列出了一些具体的好处:

  1. 节省内存:联合体的所有成员共享同一块内存,只有其中一个成员可以被有效地使用。这意味着内嵌联合体可以节省内存空间,尤其是当需要存储不同类型的数据时。

  2. 简化数据访问:通过使用内嵌联合体,可以在一个结构体中直接包含不同类型的成员,并根据需要访问相应的成员。这样可以简化数据的访问和操作过程,而不需要额外的指针或条件语句来切换不同的数据类型。

  3. 提高代码可读性:通过将相关的数据组织在结构体中,特别是在需要处理多种类型数据的情况下,可以提高代码的可读性和可维护性。逻辑上相关的数据可以打包在一个结构体中,使得代码更加清晰和易于理解。

  4. 便于扩展:使用内嵌联合体可以轻松地扩展数据结构,以支持新的数据类型。只需在联合体中添加新的成员,并相应地修改结构体定义,即可支持新的数据类型,而不会对现有的代码产生太大的影响。

1.2 案例

结构体中内嵌联合体,通过如下三步实现:
1、先定义一个结构体,要求结构体内嵌共用体
2、宏定义一个结构体指针,宏的名称为Reg1
3、通过宏来更改结构体内的元素

#include <stdio.h>int main()
{	//Case1:结构体中内嵌联合体//1、先定义一个结构体,要求结构体内嵌共用体typedef struct {unsigned int Value0 : 8;//设置位域为8bitunsigned int Value1 : 8;unsigned int Value2 : 8;//内嵌共用体union MyUnion//无需typedef,也可以自定义{unsigned int All;}bits;}My_Reg;//2、宏定义一个结构体指针,宏的名称为Reg1
#define Add_BASE		(0x30000000)
#define Reg1			((My_Reg *)Add_BASE)//强制转化为结构体指针//3、通过宏来更改结构体内的元素printf("YS_Struct占用的内存空间=%d", sizeof(My_Reg));Reg1->Value0 =	1;Reg1->bits.All = 2;

在这里插入图片描述

二、联合体中内嵌结构体

2.1 意义

在联合体(Union)内嵌结构体(Struct)可以提供一些好处:

  1. 节省内存空间:共用体内部的成员共享同一块内存空间。当结构体成员中的字段不会同时使用时,可以共享内存以减少内存占用。这对于具有大量可能性但只能选择其中一个的情况非常有用。

  2. 数据组织和访问方便:使用结构体可以将多个相关字段组织在一起,使得数据的表示更为清晰和高效。通过共用体,可以将不同类型的结构体成员组合在一起,方便对它们进行访问和操作。

  3. 多样化的数据表示:共用体内的结构体成员可以具有不同的数据类型和字段,这使得可以根据需要灵活地选择合适的数据类型和结构布局。这种灵活性可用于处理多样化的数据表示需求。

  4. 代码简洁性:通过使用共用体内嵌结构体,可以减少冗余的代码,使代码更加简洁和易于理解。通过使用共用体和结构体,可以将复杂的数据类型和数据结构组织得更加紧凑和清晰。

2.2 案例

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

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

相关文章

019-第三代软件开发-Git提交规范

第三代软件开发-Git提交规范 文章目录 第三代软件开发-Git提交规范项目介绍Git提交规范分支规范Commit Message FormatHeaderBodyFooterRevert 总结一下 关键字&#xff1a; Qt、 Qml、 git、 Commit、 release 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个…

域控主机 带瘤

1.装环境 是dns环境 加入域 二.文件上传 2.cs木马生成 服务器 75.233 上传木马成功 上线

@JsonCreator(mode = JsonCreator.Mode.DELEGATING) @JsonValue解释

@JsonCreator(mode = JsonCreator.Mode.DELEGATING)public MessageId(Long id) {this.id = id;}<

BAT028:批量为指定路径下的文件添加8位创建日期后缀名

引言&#xff1a;编写批处理程序&#xff0c;实现批量为指定路径下的文件添加8位创建日期后缀名。 一、新建Windows批处理文件 参考博客&#xff1a; CSDNhttps://mp.csdn.net/mp_blog/creation/editor/132137544 二、写入批处理代码 1.右键新建的批处理文件&#xff0c;点击…

头像Css

现有如下的图标&#xff0c;他这外层的白色圆圈是border,你敢信 .top-bar__img {margin: 0 8px 0 5px;padding: 2px;width: 30px;height: 30px;border-radius: 100%;box-sizing: border-box;border: 1px solid #eee;vertical-align: middle; }

Opencv之RANSAC算法用于直线拟合及特征点集匹配详解

Opencv之RANSAC算法用于直线拟合及特征点集匹配详解 讲述Ransac拟合与最小二乘在曲线拟合上的优缺点 讲述在进行特征点匹配时&#xff0c;最近邻匹配与Ransac匹配的不同之处 另外&#xff0c;Ransac也被用于椭圆拟合、变换矩阵求解等 1. 直线拟合 1.1 原理 RANSAC(RANdom …

数字秒表verilog电子秒表跑表,代码/视频

名称&#xff1a;数字秒表verilog电子秒表跑表 软件&#xff1a;Quartus 语言&#xff1a;Verilog 代码功能&#xff1a; 设计电子秒表&#xff0c;秒表时间精确到0.01秒&#xff0c;可通过按键控制秒表启动、暂停、复位。 代码需要在Mini_Star开发板验证。 开发板资料&…

【AIGC核心技术剖析】用于 3D 生成的多视图扩散模型

MVDream是一种多视图扩散模型,能够从给定的文本提示生成一致的多视图图像。多视图扩散模型从二维和三维数据中学习,可以实现二维扩散模型的泛化和三维渲染的一致性。我们证明了这样的多视图先验可以作为可推广的 2D 先验,与 3D 表示无关。它可以通过分数蒸馏取样应用于 2D 生…

DRF反序列化时数据验证完毕返回的是None值

文章目录 错误复现serializers.pyview.py错误 解决方案正确的代码 错误复现 serializers.py class LoginSerializer(serializers.Serializer):username serializers.CharField(min_length5, max_length10, help_text"账号")password serializers.CharField(min_l…

深度解析自动化测试流程(纯干货)

最近很多小伙伴咨询自动化测试到底该怎么做&#xff1f;流程是什么样的&#xff1f;在每个阶段都需要注意什么&#xff1f;本文也就主要从自动化测试的基本流程入手&#xff0c;对面试自动化测试工程师的同学会有不少帮助。对于在职的朋友&#xff0c;也可以参考此流程&#xf…

Apache Doris (四十五): Doris数据更新与删除 - Sequence 列

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. 基本原理

王道计算机考研 操作系统学习笔记篇章二: 进程管理

目录 进程与线程 进程的概念 概念 进程的组成 PCB 程序段、数据段 进程的特征 总结 进程的状态与转换 进程的状态 创建态、就绪态 运行态 阻塞态 终止态 进程的转换 进程的组织 链接方式 索引方式 总结 进程控制 什么是进程控制 如何实现进程控制 进程控制相关的原…

【1024程序员节】代码写诗(C++版)

#include <bits/stdc.h> #include <sal.h> using namespace std;class Sky { //天上 public:_Success_(return false) bool Sea(_In_opt_ int* Run) { //不复回int sea *Run;return false;} private:str…

【AI视野·今日CV 计算机视觉论文速览 第268期】Mon, 16 Oct 2023

AI视野今日CS.CV 计算机视觉论文速览 Mon, 16 Oct 2023 Totally 61 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Vision-by-Language for Training-Free Compositional Image Retrieval Authors Shyamgopal Karthik, Karsten Roth, Massi…

家装、家居两不误,VR全景打造沉浸式家装体验

当下&#xff0c;用户对生活品质要求日益提升&#xff0c;越来越多的用户对多功能家装用品需求较大&#xff0c;由此造就了VR全景家装开始盛行。VR全景家装打破传统二维空间模式&#xff0c;通过视觉、交互等功能让用户更加真实、直观的体验和感受家居布置的效果。 一般来说&am…

PBA.常用人工智能预测分析算法

相同的数据型态&#xff0c;利用不同的方法分析&#xff0c;就可以解决不同的课题。例如目前已相当纯熟的人脸识别技术&#xff0c;在国防应用可以进行安保工作&#xff1b;企业可做员工门禁系统&#xff1b;可结合性别、年龄辨识让卖场进行市调分析&#xff0c;或结合追踪技术…

D-Link确认数据泄露:员工成为钓鱼攻击受害者

最近&#xff0c;台湾网络设备制造商D-Link确认了一起数据泄露事件&#xff0c;该事件导致公司员工成为钓鱼攻击的受害者。虽然公司表示泄露的数据属于“低敏感度和半公开信息”&#xff0c;但仍引发了公众的关注。让我们来看看事件的详细情况。 导语 近期&#xff0c;台湾网络…

小公司如何成功申请企业邮箱

对于小公司来说拥有专业的企业邮箱不仅有助于提升公司形象&#xff0c;还能有效提高工作效率。小公司怎么申请企业邮箱&#xff1f;以下是一些步骤和建议供您参考。 需要明确公司的需求。 这包括确定所需用户账户的数量&#xff08;一般是目前使用人数再加上几个备用的邮箱&…

c++_learning-并发与多线程

并发与多线程 并发&#xff1a;进程&#xff1a;线程&#xff1a;基本概念&#xff1a;线程安全&#xff1a;问题出现的场景&#xff1a;涉及的性质&#xff1a;如何保证线程安全&#xff1f; 并发的实现手段&#xff08;优先使用多线程并发&#xff09;&#xff1a;多进程并发…

Flutter开发GridView控件详解

GridView跟ListView很类似&#xff0c;Listview主要以列表形式显示数据&#xff0c;GridView则是以网格形式显示数据&#xff0c;掌握ListView使用方法后&#xff0c;会很轻松的掌握GridView的使用方法。 在某种界面设计中&#xff0c;如果需要很多个类似的控件整齐的排列&…