C语言枚举详解,typedef简介(能看懂文字就能明白系列)

在这里插入图片描述

系列文章目录

C语言基础专栏
笔记详解

🌟 个人主页:古德猫宁-

🌈 信念如阳光,照亮前行的每一步


文章目录

  • 系列文章目录
    • 🌈 *信念如阳光,照亮前行的每一步*
  • 前言
  • 一、枚举类型的声明
  • 枚举常量
  • 三、枚举类型的优点
  • 四、枚举类型的使用
  • 五、typedef简介


前言

什么是枚举,顾名思义就是列举,把可能的取值一一列举出
例如,月份有12个月,可以一一列举,一星期有七日,可以一一列举,常见的颜色有红黄橙绿青蓝紫等等。

本节目标:
认识枚举是什么及其优点,掌握枚举类型的使用,对typedef有一个初步的认识

本节重点:
都是重点


一、枚举类型的声明

我们可以用枚举类型(enumerated type)声明符号名称来表示整型常量。使用enum关键字,可以创建一个新“类型”并指定它可具有的值。

例如

enum color 
{red=2,blue=4,green=6,yellow=8//…………
};
enum sex
{man,woman
};

第一个声明创建了一个color作为标记名,可以把enum color 作为一个类型名使用,enum color也叫枚举类型。
color的值可能是red,blue,green,yellow

枚举常量

{}中的内容是枚举类型的可能取值,也叫枚举常量。
这些可能取值都是有值的,默认从0开始,依次递增1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当然在声明枚举类型的时候也可以初始化值。
例如:
在这里插入图片描述
只要是能使用整型常量的地方就可以使用枚举常量。
例如,在声明数组时,可以用枚举常量表示数组的大小,在switch语句中,可以把枚举常量作为标签

三、枚举类型的优点

我们也可以使用#define定义变量,为什么非要使用枚举呢?
原因如下:

  1. 增加代码的可读性和可维护性。

  2. 和#define定义的标识符比较,枚举有类型检查,更加严谨。

  3. 便于调试预处理阶段会删除#define定义的符号。

#define DEBUG_ON// 使用枚举的方式
enum {DEBUG_ON
};
  1. 使用方便,一次可以定义多个常量。
// 使用 #define 的方式
#define RED 0
#define GREEN 1
#define BLUE 2// 使用枚举的方式
enum Colors {red,greem,blue
};

四、枚举类型的使用

enum color 
{red=2,blue=4, green=6,yellow=8//…………
};
int main()
{printf("%d ", red);printf("%d ", blue);enum color col = red;//用enum color定义一个col变量,并用枚举常量red给枚举变量赋值col = green;printf("%d ", col);return 0;
}

注意:在C语言中,可以拿整数给枚举变量赋值,但是在C++是不行的,C++的类型检查比较严格。


五、typedef简介

typedef 是一个高级数据类型,利用typedef可以为某一类型自定义名称,这方面与#define类型,但是两者有三处不同:

  • 与#define不同,typedef创建的符号名只受限于类型,不能用于值。

例如:

// 使用 #define 的方式
#define MAX_VALUE 100// 使用 typedef 的方式
typedef int MaxValue;
MaxValue maxValue = 100;

在这个例子中,MAX_VALUE 是一个宏,可以用于代表一个值。
相比之下,typedef 创建了一个新的类型名 MaxValue,该类型只能用于表示 int 类型,而不能直接代表一个值。

  • typedef由编译器解释,不是预处理器。
// 使用 #define 的方式
#define PI 3.14// 使用 typedef 的方式
typedef float PI;

在这个例子中,#define 是由预处理器处理的,它简单地将 PI 替换为 3.14。而 typedef 则是由编译器解释的,它创建了一个新的类型 PI,并且在后续的代码中可以用于声明变量。

  • 在其受限范围内,,typedef比#define更加灵活。
// 使用 #define 的方式
#define SIZE 10
#define ARRAY_SIZE (SIZE * 2)// 使用 typedef 的方式
typedef int Size;
Size arraySize = SIZE * 2;

在这个例子中,typedef 创建了一个新的类型 Size,并且可以在后续的代码中更加灵活地使用,而不仅仅是替代一个值。相比之下,#define 在预处理阶段仅仅是简单的文本替换,可能不具备相同的灵活性。

总结:总体来说,typedef 更适合用于创建新的类型,而 #define 更适合用于创建常量和简单的文本替换。typedef 在编译器层面提供更多的语义信息,而 #define 在预处理器阶段仅仅进行文本替换。

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

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

相关文章

索尼PMW580视频帧EC碎片重组开启方法

索尼PMW580视频帧EC碎片重组开启方法 索尼PMW-580摄像机生成的MXF文件存在严重的碎片化,目前CHS零壹视频恢复程序MXF版、专业版、高级版已经支持重组结构体正常的碎片,同时也支持对于结构体破坏或者覆盖后仅存在音视频帧EC数据的重组,需要注…

开关电源有哪些EMI整改?|深圳比创达电子EMC

某控制产品在进行辐射发射测试时,发现测试结果超标,辐射发射测试结果如下图所示: 控制产品在去掉发射源之前,就在各外部端口采取了各种滤波措施,结果并无明显作用,即使把所有相关外部引线全部拿走(只剩下电…

快速学习PyQt5的动画和图形效果

Pyqt5相关文章: 快速掌握Pyqt5的三种主窗口 快速掌握Pyqt5的2种弹簧 快速掌握Pyqt5的5种布局 快速弄懂Pyqt5的5种项目视图(Item View) 快速弄懂Pyqt5的4种项目部件(Item Widget) 快速掌握Pyqt5的6种按钮 快速掌握Pyqt5的10种容器&…

菜鸟学习日记(python)——运算符

我们进行运算时,需要两类数据,操作数和运算符,例如:ab就是一个运算,它的操作数是a和b,运算符是‘’ 在python中运算符包括以下几大类: 算数运算符比较(关系)运算符赋值…

spark无法执行pi_如何验证spark搭建完毕

在配置yarn环境下的spark时,执行尚硅谷的以下命令发现报错,找不到这个也找不到那个,尚硅谷的代码是 bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode cluster \ ./examples/jars/spark-exam…

Android AIDL实现开放系统级API 提供三方app调用

需求场景 当上层app需要调用一些系统底层的资源以及属性操作(比如Settings.system 属性的读写),甚至驱动节点的读写操作,上层app毫无疑问是没有权限的,所以就需要我们在framework 系统层做一个中转和代理,也…

java 下载文件,复制文件

1,java通过浏览器下载文件 ApiOperation(value "导出", notes "", response String.class)GetMapping("/export")public HttpServletResponse export(String path, HttpServletResponse response) { // String path "…

Linux C语言 42-进程间通信IPC之网络通信(套接字)

Linux C语言 42-进程间通信IPC之网络通信(套接字) 本节关键字:C语言 进程间通信 网络通信 套接字 TCP UDP 相关库函数:socket、bind、listen、accept、send、recv、sendto、recvfrom 参考之前的文章 Linux C语言 30-套接字操作…

k8s部署单机模式的minio

k8s部署单机模式的minio 一、说明二、yaml内容三、步骤3.1 创建资源3.2 查看启动日志3.2 查看svc并访问控制台 一、说明 项目使用minio,准备在k8s环境部署一套minio试用。 1.关于minio的原理和概念参考: https://mp.weixin.qq.com/s?__bizMzI3MDM5NjgwNg&mid…

国防科技大博士招生入学考试【50+论文主观题】

目录 回答模板大意创新和学术价值启发 论文分类(根据问题/场景分类)数学问题Efficient Multiset Synchronization(高效的多集同步【简单集合/可逆计数Bloom过滤器】)大意创新和学术价值启发 An empirical study of Bayesian netwo…

Python中函数添加超时时间,Python中signal使用

from time import time, sleepimport signal# 模拟要删除5条数据,中间有超时的i 5# 超时后执行的方法def timeout_handler(signal, frame):# 引发异常raise TimeoutError("删除第" str(i) "条,超时!")# 或者执行其他操作,不往外抛异常(超时的函数不会被…

JAVA代码优化:字符串工具类

字符串工具类,提供了一系列处理字符串的常用方法,包括判空、截取、格式化、转换等功能。 nvl(T value, T defaultValue):用于获取参数不为空的值,如果参数为空则返回默认值。 isEmpty和isNotEmpty系列方法:用于判断集…

使用Spring Cloud搭建一个项目框架之父子模块的创建

前言 说实在的,Spring Cloud的这个系列,很多人都写过,写的比博主好的一大堆,网友们百度一下,就可以发现很多很多,甚至有一批都是系列文章,我只不过之前学过一段时间,但是过了一段时…

ubuntu 系统部署 Stable Video Diffusion

11月21日,stability.ai 发布了生成式视频模型 Stable Video Diffusion(SVD) 。 官方博客链接:Introducing Stable Video Diffusion — Stability AIgit地址:GitHub - Stability-AI/generative-models: Generative Mod…

Failure[ERROR_GET_BUNDLE_INSTALLER_FAILED]【Bug已解决-鸿蒙开发】

文章目录 项目场景:问题描述原因分析(Bug已找到原因):解决方案(Bug已解决):Bug解决总结项目场景: 在运行/调试过程中出现“Failure[ERROR_GET_BUNDLE_INSTALLER_FAILED]”错误。 报错如下: 11/17 11:14:05: Launching com.example.helloworld $ hdc shell am force-…

ElasticSearch基础知识

ElasticSearch是一个高扩展的分布式全文搜索引擎,基于Lucene作为核心实现所有索引和搜索的功能。 使用场景: (1)搜索领域:如维基百科、谷歌,全文检索等。 (2)网站具体内容&#xf…

CentOS部署python Flask项目

CentOS部署python Flask项目 将项目打包成tar.gz包并上传到公网linux服务器(centos) 将整个文件夹压缩为xxx.tar.gz tar -zcvf xxx.tar.gz 文件夹名挑选文件进行打包 tar -zcvf xxx.tar.gz file1 file2 file3上传到linux服务器 scp xxx.tar.gz 用户名服务器ip:上传到服务…

errors包源码理解

文章目录 前言一、概述二、源码理解包函数NewUnwrapIsAsJoin 结构errorStringerrorString方法Error joinErrorjoinError方法ErrorUnwrap 变量ErrUnsupportederrorType 总结 前言 本文章帮助大家对errors包的理解。 一、概述 errors是Go语言内置的标准库之一,用于处…

聊聊 Jetpack Compose 的 “状态订阅自动刷新” -- mutableStateListOf

Jekpack Compose “状态订阅&自动刷新” 系列: 【 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” - - MutableState/mutableStateOf 】 【 聊聊 Jetpack Compose 的 “状态订阅&自动刷新” - - remember 和重组作用域 】 【 聊聊 Jetpack Compose 的 …

腾讯云轻量应用服务器怎么安装宝塔Linux面板?

腾讯云轻量应用服务器宝塔面板怎么用?轻量应用服务器如何安装宝塔面板?在镜像中选择宝塔Linux面板腾讯云专享版,在轻量服务器防火墙中开启8888端口号,然后远程连接到轻量服务器执行宝塔面板账号密码查询命令,最后登录和…