通关C语言自定义类型:联合和枚举
C语言的自定义类型有四个分别是:数组;结构体(struct);联合体(union);枚举(enum)。前面已经讨论过数组和结构体,这期让我们来学习一下联合体和枚举类型。
一、联合体类型
1、联合体类型的声明

与结构体相似,联合体也是由一个或者多个成员构成,这些成员可以是不同的类型。
但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。所以联合体也叫:共用体。
给联合体其中一个成员赋值,其他成员的值也跟着变化。
2、联合体的特点

由上述代码运行结果,可知,联合的成员是共用同一块内存空间的(各个成员的起始地址和整个联合体的起始地址都相同),这样的话,我们也可以推知,一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。
联合体的成员在同一时间只能使用其中一个成员。
3、联合体大小的计算
(1)联合的大小至少是最大成员的大小。
(2)当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
使用联合体是可以节省空间的。
4、相同成员的结构体和联合体对比

5、通过判断大小端程序进一步认识联合体
#include<stdio.h>
int check();
union Un
{
int i;
char c;
}un;
int main()
{
un.i = 1;
if (check())
{
printf("小端\n");
}
else
{
printf("大端\n");
}
}
int check()
{
return un.c;
}

二、枚举类型
1、枚举类型的声明
枚举顾名思义就是一一列举。把可能的取值一一列举。比如我们现实生活中:
一周的星期一到星期日是有限的 7 天,可以一一列举;性别有:男、女、保密,也可以一一列举;月份有 12 个月,也可以一一列举;三原色,也可以一一列举。这些数据的表示就可以使用枚举了。

以上定义的enum Day就是枚举类型。
{}中的内容是枚举类型的可能取值。也叫枚举常量。这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。



2、枚举类型的优点
我们知道可以使用 #define 来定义常量,那么枚举到底有什么魔力,可以让我们心甘情愿地使用枚举呢?
(1)枚举增加了代码的可读性和可维护性;
(2)和 #define 定义的标识符相比,枚举有类型检查,更加严谨;
(3)枚举便于调试,而 #define 定义的符号在预处理阶段会被删除;
(4)枚举使用方便,一次可以定义多个常量;
(5)枚举常量是遵循作用域规则的,如果枚举声明在函数内,就只能在函数内使用。
3、枚举类型的使用

需要注意的是:在C语言中可以拿整数给枚举变量直接赋值,但是在C++中是不可以的,因为C++中类型检查更加严格。
相关文章:
通关C语言自定义类型:联合和枚举
C语言的自定义类型有四个分别是:数组;结构体(struct);联合体(union);枚举(enum)。前面已经讨论过数组和结构体,这期让我们来学习一下联合体和枚举…...
python高阶技巧一
闭包 简单认识一下闭包 以下代码,内层inner函数不仅依赖于自身的参数b,还依赖于外层outer函数的参数a。inner就是一个闭包函数,既能访问外部变量,又保证外部变量不是全局的,不会被篡改掉,确保了外部变量的…...
Java 对象头、Mark Word、monitor与synchronized关联关系以及synchronized锁优化
1. 对象在内存中的布局分为三块区域: (1)对象头(Mark Word、元数据指针和数组长度) 对象头:在32位虚拟机中,1个机器码等于4字节,也就是32bit,在64位虚拟机中࿰…...
鸿蒙网络编程系列50-仓颉版TCP回声服务器示例
1. TCP服务端简介 TCP服务端是基于TCP协议构建的一种网络服务模式,它为HTTP(超文本传输协议)、SMTP(简单邮件传输协议)等高层协议的应用程序提供了可靠的底层支持。在TCP服务端中,服务器启动后会监听一个或…...
软件测试基础(自动化测试、性能测试)
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 自动化测试的意义 缩短软件开发测试周期,可以让产品更快投放市场 测试效率高,充分利用硬件资源 节省人力资源,降低测试…...
C++中的原子操作:原子性、内存顺序、性能优化与原子变量赋值
一、原子操作与原子性 原子操作(atomic operation)是并发编程中的一个核心概念,指的是在多线程环境中,一个操作一旦开始,就不会被其他线程的操作打断,直至该操作完成。这种不可分割的特性保证了操作的原子…...
游戏引擎学习第19天
介绍 这段内容描述了开发者在进行游戏开发时,对于音频同步和平台层的理解和调整的过程。以下是更详细的复述: 开发者表达了他希望今天继续进行的工作内容。他提到,昨天他讲解了一些关于音频的内容,今天他想稍微深入讲解一下他正…...
RocketMQ: 专业术语以及相关问题解决
概述 要了解 RocketMQ 的多个关键特性的实现原理,并对消息中间件遇到的各种问题进行解决我们引用 JMS 规范 与 CORBA Notification 规范,规范为我们设计系统指明了方向但是仍有不少问题规范没有提及,对于消息中间件又至关重要RocketMQ 并不遵…...
C++ 类和对象中的 拷贝构造 和 运算符重载
构造函数中可以添加参数并添加默认值构成缺省构造,如果我们在构造函数的参数中加上自身类型类的引用和其他给出默认值的参数则会构成一种特殊的构造函数叫做———拷贝构造函数 1.拷贝构造 拷贝构造的特点: 1.拷贝构造函数是构造函数的一个重载 2.拷…...
el-table最大高度无法滚动
解决el-table同时使用fixed和计算的最大高度时固定右边的列无法跟随滚动的问题 原因:el-table组件会根据传入的 max-height 计算表格内容部分 和 fixed部分的最大高度,以此来生成滚动条和产生滚动效果,当传入的 max-height 为一个计算的高度…...
Vscode写markdown快速插入python代码
如图当我按下快捷键CRTLSHIFTK 自动出现python代码片段 配置方法shortcuts’ 打开这个json文件 输入 {"key": "ctrlshiftk","command": "editor.action.insertSnippet","when": "editorTextFocus","args&…...
基于 NCD 与优化函数结合的非线性优化 PID 控制
基于 NCD 与优化函数结合的非线性优化 PID 控制 1. 引言 NCD(Normalized Coprime Factorization Distance)优化是一种用于非线性系统的先进控制方法。通过将 NCD 指标与优化算法结合,可以在动态调整控制参数的同时优化控制器性能。此方法特别…...
【数据分析】基于GEE实现大津算法提取洞庭湖流域水体
大津算法提取水体 1.写在前面2.洞庭湖水体识别1.写在前面 最大类间方差法,也称为Otsu或大津法,是一种高效的图像二值化算法,由日本学者Otsu于1979年提出。该算法基于图像的频率分布直方图,假设图像包含两类像素(前景和背景),并计算出一个最佳阈值,以最大化类间方差,从…...
计算机网络安全 —— 报文摘要算法 MD5
一、报文摘要算法基本概念 使用加密通常可达到报文鉴别的目的,因为伪造的报文解密后一般不能得到可理解的内容。但简单采用这种方法,计算机很难自动识别报文是否被篡改。另外,对于不需要保密而只需要报文鉴别的网络应用,对整个…...
LeetCode 746. 使用最小花费爬楼梯 java题解
https://leetcode.cn/problems/min-cost-climbing-stairs/description/ 优化:可以不用dp数组,用变量,节省空间。 class Solution {public int minCostClimbingStairs(int[] cost) {int lencost.length;int[] dpnew int[len1];dp[0]0;//爬到0…...
Kubernetes的pod控制器
文章目录 一,什么是pod控制器二,pod控制器类型(重点)1.ReplicaSet2.Deployment3.DaemonSet4.StatefulSet5.Job6.Cronjob 三,pod与控制器的关系1.Deployment2.SatefulSet2.1StatefulSet组成2.2headless的由来2.3有状态服…...
ArcMap 处理栅格数据地形图配准操作
ArcMap 处理栅格数据地形图配准操作今天分享 一、地形图配准 1、绘图 点击 开始绘制,四条线 2、地理配准 1)点击弹出 2)画控制点 关闭自动校正 画线 从焦点向外划线,然后邮件输入坐标弹出框,填写相应内容,…...
comprehension
1.读题---猜---文章主题 只读题目,不读选项 2.文章--定位 3.用文章对应选项 1 be based on be dependent upon 2 fruitful adj.富有成效的;硕果累累的; 3 unfruitful adj.徒然的,无益的,没有结果的 4 desperately adv.拼命地&#x…...
开源宝藏:Smart-Admin 重复提交防护的 AOP 切面实现详解
首先,说下重复提交问题,基本上解决方案,核心都是根据URL、参数、token等,有一个唯一值检验是否重复提交。 而下面这个是根据用户id,唯一值进行判定,使用两种缓存方式,redis和caffeineÿ…...
使用 npm 安装 Electron 作为开发依赖
好的,下面是一个使用 npm pack 和 npm install 命令来打包和安装离线版本的 npm 包的具体示例。我们将以 electron 为例,演示如何在有网络连接的机器上打包 electron,然后在没有网络连接的机器上安装它。 步骤 1: 在有网络连接的机器上打包 …...
从Bloodshed到Embarcadero:老牌轻量IDE Dev-C++还值得C++新手用吗?
从Bloodshed到Embarcadero:Dev-C在2024年仍是C新手的理想选择吗? 在C开发工具百花齐放的今天,一个诞生于2000年的轻量级IDE——Dev-C,历经Bloodshed、Orwell到Embarcadero的迭代,依然活跃在部分开发者的工具链中。对于…...
image.nvim高级功能:虚拟填充、窗口重叠处理完全解析
image.nvim高级功能:虚拟填充、窗口重叠处理完全解析 【免费下载链接】image.nvim 🖼️ Bringing images to Neovim. 项目地址: https://gitcode.com/gh_mirrors/im/image.nvim image.nvim是一款专为Neovim打造的图片显示插件,它突破了…...
CANN/asc-devkit MakeNDLayout函数
MakeNDLayout 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.c…...
YOLOv11公共场所人群年龄目标检测数据集-280张-pedestrian-1_5
YOLOv11公共场所人群年龄目标检测数据集 📊 数据集基本信息 目标类别: [‘adult’, ‘child’, ‘elder’]中文类别:[‘成人’, ‘儿童’, ‘老人’]训练集:196 张验证集:56 张测试集:28 张总计:…...
FlashAttention与Hugging Face Pipeline:2021年AI工程落地三大关键技术解析
1. 项目概述:这不是一份新闻简报,而是一份AI领域从业者的真实月度观察手记“The AI Monthly Top 3 — March 2021”这个标题乍看像一份轻量级行业快讯,但如果你在2021年3月前后正深度参与AI模型训练、开源社区协作或技术选型,就会…...
Unity SLG框架解析:Clash Engine六维系统架构与工程实践
1. 这不是“又一个SLG模板”,而是把“部落冲突”式玩法真正拆开揉碎的工程实践你有没有试过在Unity里搭一个像《部落冲突》那样的SLG?不是那种只有几个按钮、拖拽兵种就完事的Demo,而是真正能跑通资源采集→建筑升级→兵种训练→多线程战斗→…...
Unity接入Google Play Games完整避坑指南
1. 这不是“接个SDK”那么简单:为什么Unity项目接入Google Play Games常卡在第三步就崩了你肯定见过那种教程——标题写着“三分钟接入Google Play Games”,点进去第一行就是“下载插件、拖进Assets、调用PlayGamesPlatform.Activate()”,然后…...
多用户预付费电表箱
这款多用户预付费电表箱,专为高密度用电场景打造。采用集中式计量方案,25户仅需一块电表即可完成分户独立计量,相比传统分户电表,大幅节省安装空间与布线成本。箱体集成主断路器、分户空开、预付费电能表于一体,一户一…...
fastapi · FastAPI framework, high performance, easy to learn, fast to code, ready for production
fastapi FastAPI framework, high performance, easy to learn, fast to code, ready for production 本文整理自 GitHub,经重新整理编辑。 FastAPI framework, high performance, easy to learn, fast to code, ready for production Documentation: https://fas…...
聊一聊5家软件许可优化公司,哪个更适合你?
做软件资产管理的朋友应该都有同感:软件许可这事儿,水太深了。尤其这几年大厂审计越来越狠,一不小心就是几百万的罚单。所以很多公司开始找专门做软件许可优化的服务商。今天聊聊5家比较有代表性的:、Flexera、Snow、Anglepoint和…...
