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

news2025/2/25 18:24:10

在这里插入图片描述

系列文章目录

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.coloradmin.cn/o/1285595.html

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

相关文章

情怀零食店溢价严重,网友:情怀就是智商税,贵可以不买!

小时候的零食,是每个人心中无法抹去的甜蜜记忆。在广东,那些5毛钱的零食更是让无数人回味无穷。但近年来,这些情怀零食店的价格乱象却让不少人大呼“离谱”。 有市民反映,在一家主打怀旧主题的零食店内,三样商品竟然要…

ros2+UBUNTU读取STM32发送过来的数据(C++)

ATTENTION:一般ros2上位机访问STM32不是使用串口,即使树莓派有串口,我也不会用的,因为那还要去学习其他的语言,一般就是ros2---------ubs转串口-------STM32串口。 这个USB转串口,我们已经安装了CH340驱动了&#xff…

mall电商项目(学习记录2)

运行mall-admin Java项目 需要安装Redis,需要安装mysql,同时需要运行其项目提供的mall.sql 运行mall-admin后端程序 安装完Redis、mysql、HeidiSQL(用于执行mall.sql,界面化操作高效直观)、IntelliJ IDEA 运行mall-…

写给初学者的 HarmonyOS 教程 -- 页面路由(router)

页面路由(router)是指在应用程序中实现不同页面之间的跳转和数据传递。 HarmonyOS 提供了 Router 模块,通过不同的 url 地址,可以方便地进行页面路由,轻松地访问不同的页面。 类似这样的效果: 页面跳转是…

MISRA C 2012 标准浅析

MISRA(The Motor Industry Software Reliability Association),汽车工业软件可靠性联会; 1994年,英国成立。致力于协助汽车厂商开发安全可靠的软件的跨国协会,其成员包括:AB汽车电子、罗孚汽车、宾利汽车、福特汽车、捷…

从0到1的跨境电商创业经验分享!个人如何做跨境电商创业?

近年来,跨境电商成为了一种非常流行的创业方式,都知道国内贸易不好做,许多卖家都想通过跨境电商创业,但他们不知道具体的过程,今天龙哥我就分享一下我自己在跨境电商创业总结出来的经验,帮助你在跨境电商领…

Apollo新版本Beta自动驾驶技术沙龙参会体验有感—百度自动驾驶开源框架

在繁忙的都市生活中,我们时常对未来的科技发展充满了好奇和期待。而近日,我有幸参加了一场引领科技潮流的线下技术沙龙,主题便是探索自动驾驶的魅力——一个让我们身临其境感受创新、了解技术巨擘的机会。 在12月2日我有幸参加了Apollo新版本…

基于Linux的网络防火墙设计方法

摘要 随着Internet的迅速发展,网络越来越成为了人们日常生活不可或缺的一部分,而随之引出的网络安全问题也越来越突出,成为人们不得不关注的问题。 为了在一个不安全的网际环境中构造出一个相对安全的环境,保证子网环境下的计算机…

LeetCode | 110. 平衡二叉树

LeetCode | 110. 平衡二叉树 OJ链接 首先计算出二叉树的高度然后计算当前节点的左右子树的高度,然后判断当前节点的左右子树高度差是否超过 1,最后递归地检查左右子树是否也是平衡的。 //计算二叉树的高度 int height(struct TreeNode* root) {if(root…

国标GB28181视频监控EasyCVR内网环境部署无法启动怎么办?

安防视频监控系统EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTMP、RTSP、HTTP-FLV、…

【Spring Cloud Alibaba】1.4 Nacos服务注册流程和原理解析

文章目录 1.前言2. 服务注册的基本流程3. 服务注册的核心代码分析3.1. NacosNamingServiceNamingProxy 服务端通信的核心类NamingClientProxy nacos 2.x 版本服务端通信核心接口 3.2 NamingGrpcClientProxy 详解RpcClient类RpcClient类核心方法 start 3.3 NamingHttpClientProx…

ERROR: No matching distribution found for embreex

因为要使用Trimesh中的光锥进行投射,在windows下正常安装embreex,但是切换到Ubuntu系统的时候却发现报错,起初以为是conda环境太过于古老,导致搜索不到。 所以,第一步先升级conda: conda update conda 或者 conda update -n ba…

人才招聘信息网的设计与实现

摘 要 随着经济的高速发展,人才的流动也越来越频繁,怎样才能用最少的精力和时间来招聘人才的企业要求相一致,也让应聘人参加应聘是企业和个人都关心的问题。 本网站采用基于广域网的B/S结构平台,比C/S有更强的适用范围&#xff0…

【C++】简单的C++程序编译

一、简单的C程序 //prog.cc int main() {return 0; }二、编译 1. win11命令终端 cc prog.cc 2. win11 Visual Studio命令终端 cl /EHsc /W4 prog.cc 3. GNU编译器 g -Wall -o prog prog.cc 三、运行 1.win11 prog 2.Unix/Linux ./prog 四、查看返回值 1.win11 路…

Android : 篮球记分器app _简单应用

示例图: 1.导包 在build.gradle 中 加入 // 使用androidx版本库implementation androidx.lifecycle:lifecycle-extensions:2.1.0-alpha03 2. 开启dataBinding android{...// 步骤1.开启data bindingdataBinding {enabled true}...} 3.写个类继承 ViewModel pac…

数字图像处理(实践篇)十八 人脸检测

目录 一 使用opencv进行人脸检测 二 使用face_recognition进行人脸检测 一 使用opencv进行人脸检测 1 haarcascade_frontalface_default.xml 方法① 下载 地址:https://github.com/opencv/opencv/tree/master/data/haarcascades 点击haarcascade_frontalface_d…

AI医疗交流平台【Docola】申请823万美元纳斯达克IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于美国的AI医疗交流平台Docola近期已向美国证券交易委员会(SEC)提交招股书,申请在纳斯达克IPO上市,股票代码为 (DOCO) ,Docola计划…

学生档案管理系统研究

摘 要 学生档案管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生档案管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:效率低…

容器重启后,Conda文件完整保存(虚拟环境、库包),如何重新安装conda并迁移之前的虚拟环境

Vim安装 容器重启后默认是vi,升级vim,执行命令 apt install -y vim安装 Anaconda 1. 下载Anaconda 其他版本请查看Anaconda官方库 wget https://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-2023.03-1-Linux-x86_64.sh --no-check-certificate…

黑马头条数据管理平台项目总结

今天主要看了该项目的介绍,这个黑马头条数据管理平台项目主要包括登录、用户的权限判断、文章内容列表的筛选和分页、文章的增删查改还有图片和富文本编辑器这几大部分组成,项目配套了素材代码,像资源文件、第三方插件、页面文件夹、工具插件…