【C语言】联合体、枚举: 联合体与结构体区别,枚举的优点

目录

1、联合体

1.1、什么是联合体

1.2、联合体的声明

1.3、联合体的特点

1.4、联合体与结构体区别

1.5、联合体的大小

2、枚举

2.1、枚举类型的声明

2.2、枚举类型的优点

3、三种自定义类型:结构体、联合体、枚举


正文

1、联合体 

1.1、什么是联合体

联合体是由一个或多个成员构成,这些成员可以是不同的类型。

但编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用一块内存空间。

故,联合体也叫共用体。

给联合体的一个成员赋值,其他成员的值也会跟着变化。 

1.2、联合体的声明

 

1.3、联合体的特点

联合体的所有成员共用同一块内存空间,那么联合体的大小至少是最大成员的大小。

如下面的例子:结构体的地址与成员地址相等。 

则可知联合体的成员存储方式:

 

所有成员存储在同一块空间中,每个成员不可能同时使用。 

1.4、联合体与结构体的区别

结构体联合体
关键字structunion
成员多个成员多个成员
存放每个成员都有自己的内存空间所有成员共用同一块内存空间

 

 

1.5、联合体的大小

  • 联合体的大小至少是最大成员的大小。
  • 当最大成员大小不是最大对齐数的整数倍时,需要对齐到最大对齐数的整数倍。需要包含到最大成员的大小。 

 

 

故,使用联合体可以节省空间。但里面的成员不能同时使用。 

之前的判断大小端问题,也可以使用联合体来写

2、枚举

2.1、枚举类型的声明

枚举:把可能的取值一一列举。 

 比如,现实生活中,星期、月份、性别、颜色等都是可以一一列举的,这些数据的表示可以使用枚举。

花括号里面的内容是枚举类型的可能取值,也叫枚举常量 

 这些可能取值都是有值的,默认从0开始,依次递增1,也可以赋初始值。

2.2、枚举类型的优点

  • 增加代码的可读性和可维护性
  • 与#define定义的标识符相比,枚举有类型的检查,更加严谨
  • 便于调试,预处理阶段会删除#define定义的符号
  • 方便使用,一次可定义多个常量
  • 枚举常量是遵循作用域规则的,枚举声明在函数内就只能在函数中使用

3、三种自定义类型:

名称结构体联合体枚举
关键字structunionenum
成员多种成员多种成员多种成员
存放每个成员都有独立的空间所有成员共用同一块空间每个成员都有独立的空间

 

 

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

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

相关文章

脑部肿瘤检测YOLOV8

脑部肿瘤检测,采用YOLOV8训练得到PT模型,然后转换成ONNX,OPENCV调用,支持C/PYTHON/ANDORID开发脑部肿瘤检测YOLOV8

台球王子,Android小游戏开发

使用 Android Studio 开发了一款休闲游戏 —— 《台球王子》 关键词:台球 A. 项目描述 台球作为一项优雅、策略性强的运动,在众多游戏类型中却相对较少。因此,开发《台球王子》小游戏,可以让更多玩家能够轻松享受到台球的乐趣。…

Mysql数据库故障排查与优化

目录 前言 一、Mysql数据库的单实例故障 1.故障一——拒绝连接数据库 1.1故障内容 1.2问题分析 1.3解决方法 2.故障二——密码错误 2.1故障内容 2.2问题分析 2.3解决方法 3.故障三——数据库处理较慢 3.1故障内容 3.2问题分析 3.3解决方法 4.故障四——数据库表…

学习【Redis原理篇】这一篇就够了

目录 1. 数据结构1-1. 动态字符串(SDS)1-2. intset1-3. Dict 2. 网络模型3. 通信协议4. 内存策略 1. 数据结构 1-1. 动态字符串(SDS) 我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字…

gdb调试运行中的多线程

步骤如下: 一、查看线程状态和打印变量值 1、gdb -p 进程号 2、thread apply all bt (查看所有线程都运行到了哪里,是否 有hang住的地方,以及确定要打印的变量属于哪个thread下、属于哪个堆栈帧) 3、thread $THRE…

KUKA机器人调整示教器灵敏度(校屏)

KUKA机器人KRC4的示教器升级后,示教器屏幕由之前的电阻屏改为电容屏,不仅在外观上有所变化,屏幕校准的方法也有所不同。通过以下方法分别对新旧两款示教器进行屏幕校正,调整示教器屏幕灵敏度。 对新款示教器而言: 一…

Electron + Vue3 + TS + Vite 搭建桌面应用

参考:https://blog.csdn.net/mo911108/article/details/131456698 npm -v 10.2.4npm create vitelatest gcto-electron-app --template vue-ts运行项目 npm run dev切换镜像源并安装electron,需要设置ELECTRON_MIRROR才行,win10操作如下&am…

波奇学Linux:TCP协议

TCP协议传输层有发送缓冲区和接收缓冲区 read,recv,send的函数调用发送缓冲区,本质并不是数据发送到网络当中,数据什么时候发送,发送多少,出错了怎么办,由TCP协议自主决定 发送到对方缓冲区本…

Elasticsearch是什么及作用

初识Elasticsearch 一、Elasticsearch是什么? es是款强大的开源搜索技术,具备非常多强大的功能,能够帮助我们开发人员从海量数据中快速找到需要的内容。例如在GitHub上搜索代码,在jd、tb网站中搜索商品、在baidu中搜索答案。 二、…

智慧停车系统运行原理和影响评估

一:智慧停车系统概述 智慧停车系统运用信息通信技术,整合传感器、摄像头、车牌识别设备,实时监控停车场情况,为车主提供便捷快速的停车体验。主要功能包括车位查询、预约停车、自动计费、无感支付等。车主可通过手机APP或自助终端…

Autodesk Maya 2025 mac玛雅三维动画特效软件

Autodesk Maya 2025 for Mac是一款功能强大、操作简便的三维动画软件,适用于电影、电视、游戏、建筑、工业设计、虚拟现实和动画等领域。无论是专业设计师还是初学者,都可以通过Maya 2025实现自己的创意和想法,创作出高质量的三维作品。 软件…

NEO 学习之 MLE(最大似然估计)

文章目录 简单题目MLE 在不同的分布的运用正态分布指数分布均匀分布泊松分布 如何理解 最大似然估计? 就是我们先取出一堆样本,得到一个L( θ \theta θ) 函数,然后的话,这个是关于 θ \theta θ 的一个函数,那么由于存…

C++学习笔记(入门)

c学习笔记&#xff08;入门&#xff09; 文章目录 c学习笔记&#xff08;入门&#xff09;前言精华一、&#xff08;1&#xff09;c语言结构基础1.头文件2.指明空间&#xff1a;using namespace std3.输入输出&#xff1a;cin >>&#xff0c;cout << ... << …

3.29 文章翻译RO——Robust scheduling of building energy system under uncertainty

highlight 我们建立了一个带有冷却器和冰热能储存的建筑能源系统模型。 提出了一种两阶段鲁棒策略来调度系统运行。 具有适当参数的鲁棒策略优于确定性方法。 鲁棒策略和MPC方法的性能相似。 本文提出了一种鲁棒调度策略&#xff0c;用于在预测不确定的情况下管理具有太阳能发电…

目标检测——服饰属性标签识别数据集

一、重要性及意义 首先&#xff0c;随着电商、时尚推荐等业务的发展&#xff0c;服饰属性标签识别已经成为一项关键的计算机视觉任务。这些标签&#xff0c;如颜色、款式、材质等&#xff0c;对于实现图像搜索、时尚推荐等业务需求至关重要。服饰属性标签识别数据集为此类任务…

编程语言 MoonBit 本周有超多重磅更新等你来探索:expect 测试添加 inspect 函数,还有……

MoonBit 更新 1. expect 测试添加 inspect 函数 expect 测试添加针对 Show 接口的 inspect 函数&#xff0c;签名如下&#xff1a; pub fn inspect(obj: Show,~content: String "",~loc: SourceLoc _,~args_loc: ArgsLoc _ ) -> Result[Unit, String]⚠️ 此…

svn拉代码乱码请执行清理命令

代码有冲突&#xff0c;突然就svn就不好使了&#xff0c;报错&#xff0c;清理也报错 解决办法&#xff1a; 1、下载SQLite工具 地址&#xff1a;SQLite 下载页面 2、新建一个临时文件夹&#xff0c;使用英文名字&#xff0c;将解压后的sqlite.exe文件复制到这个临时文件夹下…

如何利用生成式人工智能(AI)推广海外仓储机器人?

随着全球物流行业的迅速发展&#xff0c;仓储机器人在提高效率和降低成本方面发挥着越来越重要的作用。然而&#xff0c;要在海外市场推广仓储机器人&#xff0c;需要制定一系列有效的营销策略。以下是一些关键步骤&#xff1a; 市场调研和定位 在海外市场推广仓储机器人之前…

OSPF---开放式最短路径优先协议

1. OSPF描述 OSPF协议是一种链路状态协议。每个路由器负责发现、维护与邻居的关系&#xff0c;并将已知的邻居列表和链路费用LSU报文描述&#xff0c;通过可靠的泛洪与自治系统AS内的其他路由器周期性交互&#xff0c;学习到整个自治系统的网络拓扑结构;并通过自治系统边界的路…

C++项目——集群聊天服务器项目(十一)服务器异常退出与添加好友业务

本节来实现C集群聊天服务器项目中的服务器异常退出与添加好友业务&#xff0c;一起来试试吧 一、服务器异常退出 在Linux环境下&#xff0c;我们在服务器端使用CTRLC结束程序执行&#xff0c;即使用CTRLC让服务器异常退出&#xff0c;这样的后果是本应登录服务器的用户在数据库…