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 在预处理器阶段仅仅进行文本替换。

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

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

相关文章

智能指针及强相关知识经验总结 --- 移动语义、引用计数、循环引用、move()、自定义删除器等

目录 前言 一、shared_ptr 1. 基本用法和构造方法 2. 引用计数机制 3. weak_ptr 解决循环引用 二、unique_ptr 1. 基本用法和构造方法 2. 独占性 3. 所有权转移 1)unique_ptr :: release() 2)移动语义 和 move() 三、 对比 shared_ptr 和 un…

Dropwizard-metric的使用

背景 近期在开发中用到了dropwizard-metric作为监控metric的埋点框架,由于是分布式的系统,前期曾经对比过hadoop-metric的实现和dropwizard-metric的实现,因为开发的项目后续会和hadoop的项目有一定的上下游关系,所以考虑排除掉h…

Re 花指令学习

概念 花指令又名垃圾代码、脏字节,英文名是junk code。花指令就是在不影响程序运行的情况下,往真实代码中插入一些垃圾代码,从而影响反汇编器的正常运行;或是起到干扰逆向分析人员的静态分析,增加分析难度和分析时间。…

开发的客户收到样品表示质量不如原供应商如何应对

有小伙伴问,在开发客户的过程当中,给客户寄了样品,客户说他的样品没有原来供应商的好怎么办? 这个问题我们来想一下,客户既然愿意把地址给我们,愿意去接你的样品,说明什么?说明客户…

系列十五、SpringBoot的启动原理分析

一、概述 所谓SpringBoot的启动原理,翻译成大白话就是"当我们在主启动类上运行run方法时,SpringBoot底层到底做了什么事情,能够帮助我们启动一个Spring的web应用",上边用大白话解释了一下什么是SpringBoot的启动原理&am…

PyQt6 QTabWidget选项卡控件

​锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计37条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话…

0001微信报Dynamic.dll,微信报DynamicDll64.dll 环境

0001微信报Dynamic.dll,微信报DynamicDll64.dll 1. 环境 操作系统:Windows10专业版 2. 现象 某赛通加密客户端升级后,企业微信和微信报如下错误 分析 该加密软件升级导致的异常 3. 解决办法 企业微信:粘贴DynamicDll.dll到…

ULAM公链第九十六期工作总结

迈入12月,接下来就是雪花,圣诞,新年和更好的我们!愿生活不拥挤,笑容不必刻意,愿一切美好如期而至! 2023年11月01日—2023年12月01日关于ULAM这期工作汇报,我们通过技术板块&#xff…

MISRA C 2012 标准浅析

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

堆排序详细讲解(一文足矣JAVA)

目录 1、什么是堆 2、大顶堆 3、小顶堆 4、排序思想: 5、代码实现 1、什么是堆 在计算机科学中,堆(Heap)是一种特殊的数据结构,通常是一个可以被看作近似完全二叉树的数组对象。在堆中,父节点的值总是…

四通道轨-轨运算芯片 D8054,外围应用简便,低功耗2.3mA (典型值)运放供电电流

D8054是一款四通道轨-轨运算放大器,外围应用简便,价格低廉。封装形式为SOP14,TSSOP14, SOP16, TSSOP16。 主要特点: ● 轨-轨输出,输出失调2mV (典型值) ● 高速250MHz,-3dB带…

网络细节核心笔记

来源,做个笔记,讲的还蛮清楚通信原理-2.5 数据封装与传输05_哔哩哔哩_bilibili 交换机

java人工智能交互医院智慧导诊系统源码

随着人工智能技术的快速发展,语音识别与自然语言理解技术的成熟应用,基于人工智能的智能导诊导医逐渐出现在患者的生活视角中,智能导诊系统应用到医院就医场景中,为患者提供导诊、信息查询等服务,符合智慧医院建设的需…

python代码样式规范

https://peps.python.org/pep-0008/

微软 Power Platform 零基础 Power Pages 网页搭建实际案例实践(三)

微软 Power Platform 零基础 Power Pages 网页搭建教程之案例实践学习(三)结合Power Apps和Power Automate Power Pages 实际案例学习 微软 Power Platform 零基础 Power Pages 网页搭建教程之案例实践学习(三)结合Power Apps和Po…

「Verilog学习笔记」时钟分频(偶数)

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 timescale 1ns/1nsmodule even_div(input wire rst ,input wire clk_in,output wire clk_out2,output wire clk_out4,output wire clk_out8); //********…

鸿蒙Harmony应用开发,一起来写一个“遥遥领先”的开眼App

前言 最近不知道怎么鸿蒙Harmony突然就很火,到处都是鸿蒙开发相关的文章,培训机构的也是各种推鸿蒙应用,不知道是真的🔥了,还是在贩卖焦虑!不过看热度不错,那也就来了解了解咱们的遥遥领先&…

css悬浮展示隐藏内容,从下向上展示

标题 <div class"cont"><div class"box"><img src"./images/1.jpg" alt""><p class"title">无锡2日1晚自由行(5钻)【5.23-5.25抢购】</p><div><p class"txt_a">席位充…

Java 并发编程面试题——Java 线程间通信方式

目录 1.✨Java 线程间有哪些通信方式&#xff1f;1.1.volatile 和 synchronized 关键字1.2.等待/通知机制1.2.1.概述1.2.2.经典范式 1.3.管道输入/输出流1.4.信号量 2.Thread.join() 有什么作用&#xff1f;它的使用场景是什么&#xff1f;3.Java 中需要主线程等待子线程执行完…

计算机毕设:基于机器学习的生物医学语音检测识别 附完整代码数据可直接运行

项目视频讲解: 基于机器学习的生物医学语音检测识别 完整代码数据可直接运行_哔哩哔哩_bilibili 运行效果图: 数据展示: 完整代码: #导入python的 numpy matplotlib pandas库 import pandas as pd import numpy as np import matplotlib.pyplot as plt #绘图 import se…