枚举类型和联合体类型

一、 枚举类型

简单介绍一下

枚举 顾名思义 就是一一例举

像我们生活中的很多东西 比如说一周有多少天

性别有几种 这些都可以用枚举类型来一一列举

1. 枚举类型的定义

我们以性别为例子

这里如果我们开始打印它们的数值的话 我们会发现

typedef enum Sex
{MALE,FEMALE,SECRET
}Sex;

male的初始数值是0

后面的数值依次增加1

这里也从侧面证明了enum枚举类型枚举出来的是常量

当然我们对于enum的值也可以自己设置

例如

2. 枚举类型的优点

我们为什么要使用枚举类型?

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

就拿我们前面写的一篇博客 通讯录 来说

case 1 2 3 这些可读性并不高 我怎么会知道1 2 3这些是什么意思呢?

这个时候我们就可以使用我们的枚举类型来定义

例如

enum select
{exit,add,del,search,rev,show,
};

使用这样的枚举类型就可以很好的替代

使用方便

这个就不用过多解释了 因为它可以一次定义多个常量

3. 枚举的使用

看代码

int main()
{enum Color//颜色{RED = 1,GREEN = 2,BLUE = 4};enum Color clr = GREEN;//只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。return 0;
}

二. 联合体(共用体)

1. 联合体的定义

联合体是一种特殊的自定义类型
这种类型定义的变量包含一系列的成员 特征是这些成员公用一块空间

例如

union UN
{char c;int i;
};

我们来看看 这个联合体的大小是多少

是4
这是为什么呢?
因为一个int类型的大小就已经是4了啊
那么char类型的数据放在哪里呢?

我们来看定义

联合的大小至少是最大成员的大小。
当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍

这时候char类型的最大对齐数是1
b类型的最大对齐数是4
所以说它的大小是4

2. 联合体的特点

联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大(因为联合至少得有能力保存最大的那个成员)。

不知道同学们还记不记得我们前面设计了一个算法来计算计算机的大小端存储

其实这个判断方法我们利用union来判断也可以

//判断当前计算机的大小端存储
int main()
{int a = 1;//0x 00 00 00 01;//01 00 00 00 ---小端存储//00 00 00 01 ---大端存储if (*(char*)&a == 1){printf("小端存储\n");}elseprintf("大端存储\n");return 0;
}

用联合体

int check_sys(int i)
{union{char a;int i;}un;un.i = 1;return un.a;
}
int main()
{int a = 1;int ret = check_sys(a);if (ret == 1){printf("小端\n");}elseprintf("大端\n");return 0;
}

实现结果如下

这样我们就知道了我们现在使用的机器是使用的小端法啦

3. 联合体的计算

首先上定义

联合的大小至少是最大成员的大小。
当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。

 看代码:

union UN
{char c[5];int n;
};union UN2
{short a[7];// 2 8   14    2int i;//4 8               4 
};
int main()
{union UN un;printf("%d\n", sizeof(un));printf("%d\n", sizeof(union UN2));return 0;
}

 运行结果如下:

以上便是本文所有内容,如有错误请各位大佬不吝赐教,感谢留言

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

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

相关文章

Docker 的网络实现

简介 标准的 Docker 支持以下 4 类网络模式: 1)host 模式:使用 --nethost 指定 2)container 模式:使用–netcontainer:NAME_or_ID 指定 3)none模式:使用 --netnone 指定 4)bridge 模…

C语言 循环语句 (3) for 循环语句

接下来 我们来看第三个 for语句 基本语句是 for关键字 然后小括号 括号中三个表达式 然后它对表达式2进行判断 如果表达式2条件成立 则走进循环体 执行完循环体 会回来执行表达式3 然后再返回来 继续对表达式2进行判断 如果表达式2 还是成立 这继续循环往复 直到表达式2的条件…

uniapp离线在Xcode上打包后提交审核时提示NSUserTrackingUsageDescription的解决方法

uniapp离线在Xcode上打包后提交审核时提示NSUserTrackingUsageDescription的解决方法 问题截图: 亲测有效的方法 方法一: 选择通过uniapp的开发工具Hbuilder来进行在线打包,取消默认勾选的以下选项。 然后进行在线打包就不会存在提交审…

MySQL:多表查询练习

#1.出版社信息 与 图书信息 交叉连接 select * from 出版社信息 cross join 图书信息; #2.从“客户信息”和“订单信息”两张数据表中查询购买了商品的客户信息,要求查询结果显示客户姓名、订单编号、订单状态。 select 客户信息.客户姓名,订单信息.订单编号,订单…

PS路径文字怎么变换的?

如果网友们没有用过钢笔工具,画好后的样子是什么,建议你看看这个方法! 建立的路径之后,在编辑菜单栏里单击。 选择变换路径,可以改变路径文字的方向,点击垂直翻转即可完成方向的改变!

linux进阶篇:Nginx反向代理原理与案例详解

Linux服务搭建篇:Nginx反向代理原理与案例详解 一、什么是正向代理 举个栗子: 我们在校外、公司外,是访问不到学校、公司的内网的,但是我们想要访问内网资源时,会用到VPN。而一般内网会存在一个VPN服务器&#xff0c…

n皇后问题

843. n-皇后问题 - AcWing题库 n皇后这道题目, 历来被作为理解深搜\回溯法的样板题, 首先我们可以用中规中矩的深搜来解决这道题: #include<iostream> using namespace std; const int N10; int n; char g[N][N];bool col[N],dg[N],udg[N];bool legal(int u,int i) {ret…

vulhub之jboss(CVE-2017-7504)

JBoss AS 4.x 及之前版本中&#xff0c; JbossMQ 实现过程的 JMS over HTTP Invocation Layer 的 HTTPServerILServlet.java 文件存在反序列化漏洞&#xff0c;远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码。 CVE-2017-7504 漏洞与 CVE-2015-7501 的漏洞原理相似&a…

「51媒体」企业单位新闻稿件考核,怎么发布

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 电力税务企事业单位部门等单位提供了新闻稿件&#xff0c;如何在一些重点媒体进行宣发呢&#xff1a; 精准锁定发布媒体 了解考核要求&#xff1a;仔细阅读宣传任务名单&#xff0c;了解…

C++初阶之list的使用和模拟以及反向迭代器的模拟实现

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 算法 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂 一.list简介 list是一个带头双向链表&#xff0c;在数据结构的时候…

不必追求深度,浅尝辄止为宜

近日笔者撰文称&#xff0c;有幸应《百度-百家号》相邀&#xff0c;在其发起的《征文任务》栏目中写作深度文章&#xff0c;便试着开头写了一篇《万科有“活下去”的可能性吗&#xff1f;》的时评文章&#xff0c;于5月3日发表&#xff0c;舆情反映不错&#xff0c;不到三天时间…

python菜鸟级安装手册

python安装教程 电脑-右键-属性&#xff0c;确认系统类型和版本号&#xff0c;比如本案例系统是64位 win10 点击python官网&#xff0c;进行下载 适用于 Windows 的 Python 版本 |Python.org 选择第一个安装程序64位即可满足需要&#xff0c; 嵌入式程序包是压缩包版本&…

JavaScript中的RegExp和Cookie

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 &#x1f506;RegExp &#x1f3b2; 1 什么是正则表达式 &#x1f3b2;2 创建…

山东省文史书画研究会成立20周年系列活动徽标征集胜选名单公布

2024年5月1日&#xff0c;山东省文史书画研究会成立20周年系列活动徽标征集落下帷幕。征稿启事下发后&#xff0c;得到社会各界人士的广泛关注与参与&#xff0c;共收到设计方案608件。经过初评&#xff0c;选出5幅作品进入复评&#xff0c;并经过网络投票和专家投票相结合的方…

颗粒精炼剂可用于铝及铝合金熔铸工艺中 我国生产企业众多

颗粒精炼剂可用于铝及铝合金熔铸工艺中 我国生产企业众多 颗粒精炼剂指外观呈白色粉末状或颗粒状&#xff0c;可用于金属颗粒表面处理的重要化学药剂。颗粒精炼剂具有反应速度快、绿色环保、安全稳定性好等优势&#xff0c;在铝及铝合金的熔铸工艺中应用较多。按照钠含量不同&a…

有关string的部分接口

1.迭代器与反向迭代器(iterator-) 迭代器是可以用来访问string里面的内容的&#xff0c;这里来记录一下使用的方法。 里面用到了一个叫做begin函数和一个end函数&#xff0c;这两个都是针对string使用的函数。 s1.begin()函数是指向string内容的第一个元素 而s1.end()指向的则…

每日OJ题_贪心算法三②_力扣553. 最优除法

目录 力扣553. 最优除法 解析代码 力扣553. 最优除法 553. 最优除法 难度 中等 给定一正整数数组 nums&#xff0c;nums 中的相邻整数将进行浮点除法。例如&#xff0c; [2,3,4] -> 2 / 3 / 4 。 例如&#xff0c;nums [2,3,4]&#xff0c;我们将求表达式的值 "…

滑块验证码说明

滑块验证码说明 滑块验证码 旋转验证码 滑动还原验证码 文字点选验证码 快速上手 注意: 如果你项目是使用的Springboot&#xff0c; 请使用SpringBoot脚手架工具tianai-captcha-springboot-starter; 该工具对验证码进行了封装&#xff0c;使其使用更加方便快捷 后端说明 引…

深度学习之基于Matlab Googlenet网络男女性别识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着计算机视觉技术的快速发展&#xff0c;性别识别在多个领域中都展现出了广泛的应用前景&#xff…

【Unity】如何获得TMP Button下的text内容

【背景】 unity项目中使用了TMP命名空间的Button UI组件。脚本中需要获得Button下Text的内容,但是发现用TextMeshPro仍然无法获得button下的text对象。 【分析】 Hierarchy结构上看明确Button下是有Text组件的: 括号里是TMP,所以理论上用TextMeshPro类型去FindComponent…