【C语言进阶篇】自定义类型:联合体和枚举

【C语言进阶篇】自定义结构体类型:联合体和枚举

🌈个人主页:开敲

🔥所属专栏:C语言

🌼文章目录🌼

1. 联合体

    1.1 联合体类型的声明

    1.2 联合体的特点

    1.3 联合体大小的计算

2. 枚举

    2.1 枚举类型的声明

    2.2 枚举类型的优点

    2.3 枚举类型的使用

1. 联合体
    1.1 联合体类型的声明

  与结构体类似,联合体也是由一个或者多个成员构成的,这些成员可以是不同的类型。唯一不同的是:编译器只为最大的成员开辟空间,联合体中剩余的成员共用这一块空间。因此,联合体也称为:共用体。

这里的大小为4,因为联合体内成员最大的就是 int 型,而剩余的 char c成员共用这块空间。

    1.2 联合体与结构体对比

  

                                                                   内存分配如下图:

    1.3 联合体大小的计算

①  联合体的大小至少是最大成员的大小。

②  当最大成员的大小不是最大对齐数的整数倍时,就要内存对齐到最大对齐数的整数倍。

    1.4 联合体的巧妙用法

  在之前的文章中,我们判断一个机器是大小端的方法是:创建一个整型变量赋值为1,用一个char* 的指针指向这个变量的第一个字节的地址,判断是 0 还是 1 从而判断是大端存储还是小端存储

  而在我们学习了联合体之后,就可以用一个非常巧妙的方法来判断机器的大小端:

  这里的 c 是跟 i 存放在同一个空间的,而 char 类型只占一个字节,因此,c 保存在了  i 内存的第一个字节处,相当于 c 指向了 i 的第一个字节地址,因此,可以通过判断 c 的值来判断机器的大小端模式。 

2. 枚举

  枚举——顾名思义,就是一一列举,把可能的取值一一列举,和穷举不同的是,穷举就算有再多,只要能列举完就会列举,而枚举并不会列举太多。

  生活中有许多枚举的例子,比如:

  一周的星期一到星期日可以一一列举;

  一年有十二个月份可以一一列举;

  ......

  当我们想要表示这些数据的时候,就可以使用枚举。

    2.1 枚举类型的声明

    

上面定义的 enum Dayenum Month 都是枚举类型,{}中的内容是枚举类型的可能取值,也叫枚举常量,这些常量都是默认有值的,从上至下从0依次递增:

enum Day//星期
{
	Mon,//0
	Tues,//1
	Wed,//2
	Thur,//3
	Fir,//4
	Sat,//5
	Sun//6
};


enum Month//月份
{
	Janu,//0
	Febr,//1
	Mar,//2
	Apr,//3
	May,//4
	June,//5
	July,//6
	Aug,//7
	Sep,//8
	Oct,//8
	Nove,//10
	Dec//11
};

  当然我们也可以在创建的时候赋初始值(这里需要注意的是,在C语言中可以对枚举常量赋值。但在C++中没法进行赋值操作,C++的类型检查更加严格,类型不相同无法进行赋值操作),当赋了初始值以后,剩余成员的默认值也会随之改变,比如:

    2.2 枚举类型的优点

    在我们之前的学习中,我们学习到了#define 来定义常量,既然#define 可以用来定义常量,为什么还要使用枚举呢?下面就是一些枚举的优点:

①  增加代码的可读性和可维护性

②  #define定义的常量没有类型,而枚举中的常量带有类型,因此在使用枚举时更加严谨

③  便于调试观察,#define定义的常量,在使用时会删除#define定义的符号,譬如:

 

④  使用方便,一次可定义多个常量:

⑤  枚举常量是遵守作用域规则的。,在函数内部声明的枚举只能在函数内部使用。

    2.3 枚举类型的使用  

                                                        创作不易,点个赞呗,谢谢啦~

         

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

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

相关文章

动态内存经典笔试题分析及柔性数组

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…

链式二叉树

前言 本章将重点讲解链式二叉树的四种遍历方式。 一、链式二叉树 1、引入链式二叉树 我们知道完全二叉树可以使用堆存储,那非完全二叉树? 非完全二叉树不适合用堆来存储,因为浪费空间,所以非完全二叉树使用链式存储。 2、链式二…

做独立站烧不烧钱?真做起来的话要投入多少成本?

建立一个独立网站需要花钱吗? 实际做起来要花多少钱? 这是一种灵魂的拷问,也是大多数想进入这个行业或者刚刚起步的人都在思考或者思考的问题。 对于这样的问题,没有人能够给出确切的数字,甚至是确定的答案。 至于为什…

python基础——对序列的通用操作【+和*、in、切片操作、separator.join(iterable)】

📝前言: 我们已经学习了python数据容器中的列表,元组以及字符串。而他们都属于序列 (序列是指:内容连续,有序,可以用下标索引访问的数据容器) 在之前已经介绍了不少操作方法&#xf…

NVIDIA 推出地球-2云平台,使用AI超级计算机的模拟技术,预测整个地球的气候变化

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Sui技术帮助Studio Mirai成功实现创意愿景

Brian和Ben Li兄弟对艺术充满热情,通过共同创立的研发工作室Studio Mirai,他们正在探索Web3技术与创意产业的交集。 Studio Mirai的第一个头像类项目(profile picture,PFP)Tamashi存在于Nozomi World中,这…

教育内卷化:焦虑下的竞争与反思

教育内卷化:焦虑下的竞争与反思 一、教育内卷化的现象解读 教育内卷化,作为当前社会的热点话题,体现了教育资源竞争日趋激烈的现状。这一现象在中小学阶段尤为明显,家长们为了让孩子进入优质学校,不惜花费巨资购买学…

【SpringCloud】Consul中数据持久化配置并注册为Windows服务

Consul用起来两个比较麻烦的地方: 一是每次都需要执行打开命令行执行 consul agent -dev 命令来启动Consul服务,而且不能关掉命令行.另外一点就是在Consul中设置的数据,每次重启之后就没了. 就很烦.因此为大家带来解决上述问题的方法 首先要在官网下载Consul安装包的解压目录下…

ArcGIS添加天地图底图服务

目录 一、注册天地图官网、申请Key 二、ArcGis配置和使用 1、配置 2、使用 三、其他方法 一、注册天地图官网、申请Key 进入官网,并注册账号。 地址:国家地理信息公共服务平台 天地图 (tianditu.gov.cn) 点击地图API,申请Key。 注意&am…

使用有道bce-embedding-vase-v1模型构建知识向量库并进行相似度搜索

国产embedding 最开始使用LangChain结合通义千问API实现了基础的RAG(Retrieval-Augmented Generation)过程,当时认为embedding模型似乎是LangChain的一部分,然后又通过学习OpenAI的API发现,其实使用embedding模型不需要…

可视化日记——极坐标绘制雷达图

目录 一、创建极坐标 二、数据集准备 三、划分角度 四、指定半径 五、绘制 一、创建极坐标 Python中没有直接画雷达图的函数,若要绘制需要先创建画布和极坐标轴域,再设定角度与半径的参数(极坐标中角度与半径确定一个点的位置&#xff…

反射机制的知识

1.反射机制 静态语言:JAVA 和C 反射:可以借助于反射API可以获取任何类的内部信息,并可以直接操作任意对象的内部属性、方法、泛型等。 实现获得Class类的方法有哪些: 类名.classClass.forName("类的绝对路径")对象.ge…

Python爬虫基础教程:爬虫采集数据要注意什么?|电商数据商品详情页API接口

数字化时代,大数据信息的收集和应用逐步普及,离不开网络爬虫的广泛应用。由于数据和信息市场的不断扩大,需要大规模的网络爬虫来应对大规模的数据信息采集。在此过程中需要注意哪些问题? 1、先检查是否有API,API是网站…

Women of Polkadot:波卡生态的女性社群与创新力量

在 Web3 行业里,女性似乎总是被忽视的群体。线下峰会的合照一眼望去尽是西装革履的男性成员,项目和机构高管的名单里也似乎难以寻觅到女性领导者的身影。在这个强调技术、编程、极客精神的行业里,女性身份的缺席看起来如此天生自然。 根据 B…

人工智能基础部分25-一篇文章将透注意力机制(Attention)与自注意力机制(self-Attention),帮助大家加深印象

大家好,我是微学AI,今天给大介绍一下人工智能基础部分25-一篇文章将透注意力机制(Attention)与自注意力机制(self-Attention),帮助大家加深印象。注意力机制(Attention)与自注意力机制(self-Attention)都是在深度学习模型中用于提升模型性能的技术&#…

C 多维数组

C 语言支持多维数组。多维数组声明的一般形式如下: type name[size1][size2]...[sizeN];例如,下面的声明创建了一个三维 5 . 10 . 4 整型数组: int threedim[5][10][4];二维数组 多维数组最简单的形式是二维数组。一个二维数组&#xff0c…

测试开发面试题总结(全)

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 某基金管理公司线下测试开发面试题总结。 测开题目如下 可以尝试自己先写,写完之后…

【Linux】实现进度条小程序

个人主页 : zxctscl 如有转载请先通知 文章目录 1. 前言2. 回车和换行3. 缓冲区4. 进度条4.1 倒计时设置4.2 进度条4.2.1 实现简单进度条4.2.2 进度条完善 5. 附进度条代码5.1 Processbar.h5.2 Processbar.c5.3 Main.c5.4 Makefile 1. 前言 在之前已经了解了 【Lin…

GDK-你的跳广告神器(某足兆足兆替品)

GKD(又称搞快点)是一款免费开源简洁多规则的自动跳过广告的软件。简而言之,基于预设的定时更新订阅规则快照功能,实现识别并自动点击跳过任何开屏广告及点击关闭应用内部任何弹窗广告,如关闭某些APP开屏和内含推荐广告…

数据库关系代数运算:期末+复试

文章目录 一、知识概览二、并三、差四、交五、笛卡尔积六、投影七、选择八、连接九、除实战训练 一、知识概览 二、并 三、差 四、交 五、笛卡尔积 六、投影 投影是对列 七、选择 选择是对行 八、连接 自然连接是一种特殊的等值连接,他要求两个关系表中进行连…