枚举类型和联合体类型

一、 枚举类型

简单介绍一下

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

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

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

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,一经查实,立即删除!

相关文章

C语言空结构体所占的内存是多少?

一、问题 标志结构体的关键字是 struct,它将⼀些相关联的数据封装成⼀个整体,⽅便在程序中使⽤。那么,空结构体所占内存是多少呢? 二、解答 1. 知识点介绍 结构体所占的内存⼤⼩是其成员所占内存之和,例如&#xff1…

【Git】 Git分支操作指南

隐形的纪念躲在心里面 也许吧 也许不会再见 阴天或晴天 一天又一年 风它在对我说莫忘这一切 🎵 蔡淳佳《隐形纪念》 Git是一种非常强大的分布式版本控制系统,允许用户在开发过程中创建不同的分支(branch)来分…

【Unity Shader入门精要 第5章】开始 Unity Shader 学习之旅

1. shaderLab语义 在之前的代码中,经常会看到类似POSITION 、SV_POSITION之类的东西,这些都属于shaderLab的语义。简单来讲,这类语义的作用就是用来通知Unity某个变量(或参数、输出)是干什么用的,可以以此…

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的条件…

2024年巴黎奥运会网络安全风险评估

研究显示,2024年巴黎奥运会组委会网站的总体网络安全态势基本安全,但也凸显了一些风险,包括开放端口、SSL错误配置、cookie同意违规和域名抢注。 2024年巴黎奥运会备受全球关注,预计将有超过10亿人观看2024年巴黎奥运会&#xff…

公司后缀缩写

Co. Co. 是 company 的缩写,company 本身就是公司(统称)的意思,包括了各种类型公司。 单独使用 Co. 看不出公司具体的类型,经常会跟另一后缀一起使用 Co.,Ltd (意思看后面)。 Ltd. Ltd. 是 L…

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

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

MySQL:多表查询练习

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

PS路径文字怎么变换的?

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

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

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

imx6ull开发板设置SD卡启动,SD卡中烧写uboot,kernel,设备树,根文件系统fs

IMX6ULL ARM Linux开发板SD卡启动,SD卡的分区与分区格式化创建_sd制作分区-CSDN博客

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;在数据结构的时候…

生成ssh来连接git

生成SSH密钥&#xff1a; 打开你的命令行终端&#xff08;如Windows的CMD、PowerShell&#xff0c;或者Linux/Mac的Terminal&#xff09;。 运行以下命令来生成SSH密钥对&#xff08;私钥和公钥&#xff09;&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexampl…

c++ 的线程是个对象吗

在C中&#xff0c;线程通常不是直接通过对象来表示的&#xff0c;但C11及以后的标准引入了对线程的高级抽象&#xff0c;主要是通过<thread>库中的std::thread类来实现的。因此&#xff0c;可以说std::thread是一个类&#xff0c;其实例&#xff08;对象&#xff09;表示…

10个SpringMVC的核心组件详解

Spring MVC 的核心组件是构成整个框架的基础&#xff0c;它们协同工作以支持基于 MVC 架构的 Web 应用程序开发。以下是V哥工作中整理的每个组件的详细介绍&#xff0c;包括示例代码和解释&#xff1a; 1. DispatcherServlet&#xff1a; 作用&#xff1a;作为前端控制器&…

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

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