通关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: 在有网络连接的机器上打包 …...
用了大半年的免费云服务器,分享真实体验
最近一直在用阿贝云的免费云服务器和免费虚拟主机,整体体验非常不错。服务器性能稳定,响应速度快,完全能满足个人建站、学习测试的需求,而且操作简单,新手也能快速上手。免费虚拟主机的空间足够,搭建个人博…...
从Pico到Pico W:无线加持下,树莓派微控制器如何重塑物联网原型设计
1. 从有线到无线的跨越:Pico W带来的物联网革命 记得我第一次用树莓派Pico做智能温湿度计项目时,被传感器布线折腾得够呛。为了把数据传到服务器,不得不在面包板上插满杜邦线,最后成品活像只炸毛的刺猬。直到Pico W出现ÿ…...
2026最权威的AI学术平台推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 把维普系统检测 AI 生成文本的特性揪住,要使 AI 率降下来,得从词汇、…...
【Hot 100 刷题计划】 LeetCode 438. 找到字符串中所有字母异位词 | C++ 滑动窗口题解
LeetCode 438. 找到字符串中所有字母异位词 | C 固定滑动窗口极致优化题解 📌 题目描述 题目级别:中等 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词ÿ…...
从野火官方手册到实战:我的RK3568 NPU开发环境搭建全记录(含conda虚拟环境管理心得)
从野火官方手册到实战:我的RK3568 NPU开发环境搭建全记录(含conda虚拟环境管理心得) 作为一名长期在边缘计算领域折腾的开发者,最近终于有机会上手Rockchip的RK3568芯片。这款芯片内置的NPU(神经网络处理单元ÿ…...
SEO_中小企业如何低成本做好SEO推广的秘诀
为什么SEO推广对中小企业至关重要 在当今的数字经济时代,网络已成为中小企业营销的主要渠道。搜索引擎优化(SEO)推广不仅能够帮助中小企业提高在搜索引擎中的排名,还能带来更多的潜在客户。SEO推广常常被认为是一个高成本、高技术…...
使用 Applications Manager 实现 AWS 云监控:保障业务应用高效运行
随着企业加速将应用和服务迁移至云端,Amazon Web Services(AWS)凭借其可扩展性、可靠性及成本效益,成为主流选择。然而,云环境日益复杂,企业亟需强大的监控系统,以确保应用稳定运行。Applicatio…...
3步攻克Dlib安装难题:Windows Python环境零编译实战指南
3步攻克Dlib安装难题:Windows Python环境零编译实战指南 【免费下载链接】Dlib_Windows_Python3.x Dlib compiled binaries (.whl) for Python 3.7-3.14 and Windows x64 项目地址: https://gitcode.com/gh_mirrors/dl/Dlib_Windows_Python3.x 你是否曾在Win…...
YOLOv8人脸检测架构解析:高精度实时人脸定位技术实战指南
YOLOv8人脸检测架构解析:高精度实时人脸定位技术实战指南 【免费下载链接】yolov8-face yolov8 face detection with landmark 项目地址: https://gitcode.com/gh_mirrors/yo/yolov8-face YOLOv8-face是基于YOLOv8架构优化的专业人脸检测解决方案,…...
Verilog基础:task和function的使用(一)
相关文章 Verilog基础专栏https://blog.csdn.net/weixin_45791458/category_12263729.html 一、前言 任务(task)和函数(function)即提供了从不同位置执行公共过程的能力(因为这样可以实现代码共享),也提供了把大过程分解成小过程的能力&…...
