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

news2024/11/15 17:16:29

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨
📢:不妨浏览一下我的博客主页【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;//设置位域为8bit
		unsigned 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.coloradmin.cn/o/1110959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法|动态规划No.22】leetcode115. 不同的子序列

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

jmeter接口自动化测试

前面我们复习了jmeter 的非图形化界面运行我们的测试接口。 大家可以翻看往期jmeter的文章。 具体来说就是&#xff1a;jmeter -n -t ****.jmx -l ****.jtl -e -o **** (*号代表路径&#xff09; 生成了测试报告。 但是这个非图形化运行有个缺点&#xff0c;就是只能运…

Pygame中实现图片的移动

在《Pygame中将鼠标形状设置为图片2-1》和《Pygame中将鼠标形状设置为图片2-2》中提到将鼠标设置为指定图片。接下来在该文章涉及到的代码基础之上&#xff0c;实现图片的移动&#xff0c;效果如图1所示。 图1 图片移动效果 从图1中可以看出&#xff0c;导入一个大猩猩的图片&…

DailyPractice.2023.10.19

文章目录 1. 24. 两两交换链表中的节点2. 23. 合并 K 个升序链表3.148. 排序链表4.236. 二叉树的最近公共祖先5.78. 子集6.138. 随机链表的复制7.25. K 个一组翻转链表 1. 24. 两两交换链表中的节点 24. 两两交换链表中的节点 /*** Definition for singly-linked list.* stru…

扫描全能王文档矫正逆向记录

背景 扫描全能王有个功能是将弯曲的文本拉直成平直的文本。在扫描全能王的app上&#xff0c;这个功能的入口在拍书籍的tab。同时在图片编辑页面&#xff0c;也有个按钮可以触发这个功能。它的效果大概如下。 这篇文章主要介绍如何逆向这个算法 初步定位 对扫描王apk初步逆向…

【软考-中级】系统集成项目管理工程师 【15 信息 (文档) 和配置管理】

持续更新。。。。。。。。。。。。。。。 【第十五章】信息&#xff08;文档&#xff09;和配置管理 知识精讲考点 1:软件文档一般分为三类:开发文档、产品文档、管理文档。考点 2:文档的质量可以分为四级:考点 3:配置管考点 4:考点 5:考点6:考点 7:配置项版本号:考点 8:考点9…

[BUUCTF newstar week2] crypto/pwn/reverse

难度上来了&#xff0c;而且比赛加多了&#xff0c;newStar/0xGame/SHCTF&#xff0c;moe也结束了&#xff0c;周末还有TCP1P&#xff0c;来不及写东西了。抓时间先一个个来吧。 crypto 滴啤 就是dp的意思&#xff0c;也就是泄露dp求分解 from Crypto.Util.number import *…

汽车标定的ASAM MCD-1 POD

1.导语 ​做汽车标定slave基础软件以及做参数标定的同学&#xff0c;对ASAM MCD-2-MC(ASAP2&#xff0c;人话A2L文件)、ASAM MCD-1-XCP&#xff08;人话xcp协议&#xff09;一定非常熟悉。 常见的标定套件也是由很熟悉的供应商提供&#xff0c;例如ETAS的INCAES500系列产品、…

Hadoop3教程(二十三):Yarn的三大调度器

文章目录 &#xff08;129&#xff09;FIFO调度器&#xff08;130&#xff09;容量调度器特点资源分配算法 &#xff08;131&#xff09;公平调度器特点缺额的定义队列资源分配方式基于FIFO策略基于Fair策略资源分配算法 DRF策略 参考文献 &#xff08;129&#xff09;FIFO调度…

R6G azide, 5-isomer具有良好的水溶性,2135330-71-9

试剂 | 基础知识概述&#xff08;部分&#xff09;: 英文名称&#xff1a;R6G azide, 5-isomer CAS&#xff1a;2135330-71-9 分子式&#xff1a;C30H32N6O4 分子量&#xff1a;540.61 规格标准&#xff1a;10mg&#xff0c;25mg&#xff0c;50mg&#xff0c;可提供mg级以…

C1N短网址 | 核心专利(1) - 基于随机字符实现的网址缩短

1.短链接介绍 举个例子&#xff0c;现在我的博客地址是这个&#xff1a;https://blog.csdn.net/liwei128/article/details/91358071 (55个字符)&#xff0c;我通过短链接服务可以将上面的地址转成http://m.c1n.cn (15个字符) 那我为什么要将原有的URL转成较短的链接呢&#x…

C++QT---QT-day3

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否为&…

https证书配置(nginx)

HTTPS 是什么 HTTPS 是一种应用层协议&#xff0c;是一种透过计算机网络进行安全通信的传输协议&#xff0c;HTTPS 经由 HTTP 进行通信&#xff0c;但是在 HTTP 的基础上引入了一个加密层&#xff0c;使用 SSL/TLS 来加密数据包&#xff0c;HTTPS 开发的主要目的&#xff0c;是…

重磅!海云安联合深圳大学共同举行“人工智能联合实验室”揭牌仪式

2023年10月17日&#xff0c;大数据系统计算技术国家工程实验室-深圳海云安网络安全技术有限公司人工智能联合实验室(以下简称“联合实验室” )揭牌仪式在深圳大学致真楼图灵会议室举行。 大数据国家工程实验室执行主任李坚强、成果转化办公室主任王利、健康大数据研究中心副主任…

无代码玩转web UI自动化

可以直接进入官网下载开源版或点击右上角体验企业版体验 RunnerGo UI自动化平台 RunnerGo提供从API管理到API性能再到可视化的API自动化、UI自动化测试功能模块&#xff0c;覆盖了整个产品测试周期。 RunnerGo UI自动化基于Selenium浏览器自动化方案构建&#xff0c;内嵌高度…

最新AI创作系统ChatGPT网站H5源码V2.6.4+搭建部署教程+支持GPT4.0+支持ai绘画(Midjourney)/支持Prompt预设应用

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统AI绘画系统&#xff0c;支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署…

C语言实现面向对象编程 | 干货

前言 GOF的《设计模式》一书的副标题叫做“可复用面向对象软件的基础”&#xff0c;从标题就能看出面向对象是设计模式基本思想。 由于C语言并不是面向对象的语言&#xff0c;C语言没有直接提供封装、继承、组合、多态等面向对象的功能&#xff0c;但C语言有struct和函数指针。…

2023年中国精准护肤发展现状及趋势分析:未来皮肤实现定制化诊断成趋势[图]

精准护肤是深度融合光电科技与精准医学在皮肤上的实践&#xff0c;以皮肤问题为导向通过研究挖掘各类皮肤问题发生发展的生理机制、环境因素&#xff0c;找寻相应的靶点并选择活性成分与光电技术&#xff0c;利用现代医疗技术实现能量/成分靶向传递&#xff0c;并通过不同人群的…

选择低代码开发,我轻松了不少!

一、传统软件开发现状 随着对定制应用程序的需求激增&#xff0c;很明显传统的开发方法无法跟上。 传统的瀑布式应用程序开发过程需要许多具有高度专业化角色的人员参与。例如&#xff0c;该过程需要&#xff1a; 业务分析师创建功能需求技术分析师将这些需求转化为技术规范创建…

mysql宋红康第一篇

mysql宋红康第一篇 索引的数据结构 为什么使用索引&#xff1f; 索引是存储引擎用于快速找到数据记录的一种数据结构&#xff0c;就好比一本教科书的目录部分&#xff0c;通过目录中找到对应文章的页码&#xff0c;便可快速定位到需要的文章。MySQL中也是一样的道理&#xf…