C语言 自定义类型 之 【枚举】

news/2024/5/19 0:48:04 标签: c语言, 自定义类型, 枚举

文章目录

前言

枚举在我们平时练习或学习的时候可能不是很常用,但是其在工程项目里,还是比较常见的,因为他能起到优化用。并且,有时我们在写题的时候,也会运用到枚举的思想。

枚举的介绍

枚举顾名思义就是 一 一 列举。把可能的取值 一 一 列举。

比如我们现实生活中:
1.一个星期从星期一到星期天的有限的7天可以 一 一 列举。
2.月份从1月到12月也可以 一 一 列举出来。
3.颜色分红黄蓝绿蓝靛紫几种颜色,也可以 一 一 列举出来。

枚举类型的定义

直接上代码(注意观察语法形式):

// enum var_name  这个就是枚举类型
enum Sex  // 枚举性别
{
	MAN, // 男人   
	WOMAN  // 女人
	// 当然也有可能是人妖
};

enum Day  // 枚举星期
{	
	Mon,  // 注意这里是逗号
	Tues,
	Wed,
	Thur,
	Fri,
	Sat,
	Sun  // 最后一个后面什么符号也不用打
};  // 这里必须要有分号

enum Color
{
	RED,
	GREEN,
	BLUE
};

当然,既然是类型,那么也可以使用typedef起别名:

typedef enum Color
{
	RED,
	GREEN,
	BLUE
}Clr;  // 将 enum Color 类型名 简化成 Clr

1.以上定义的enum Dayenum Sexenum Color都是枚举类型。

2.{}中的内容是枚举类型的可能取值,也叫枚举常量。

3.这些可能取值都是有值的,默认从0开始,依次递增1,例如:上面的RED可以看作0GREEN可以看作1BLUE可以看作2

4.当然在定义的时候也可以赋初值。例如:

enum Color//颜色
{
	RED = 1,
	GREEN = 2,
	BLUE = 4
};

而如果是这样赋值:

enum Day  // 枚举星期
{	
	Mon, 
	Tues,
	Wed,
	Thur = 10,
	Fri,
	Sat,
	Sun  
};
  • 那也就意味着从MonWed是由0开始依次递增(Mon = 0, Tuse = 1, Wed = 2),从ThurSun是由10开始依次递增(Thur = 10, Fri = 11, Sat = 12, Sun = 13)。

枚举的优点

  • 为什么使用枚举?
  • 我们可以使用 #define 定义常量,为什么非要使用枚举

原因:

  1. 增加代码的可读性和可维护性。
  2. 和#define定义的标识符比较枚举有类型检查,更加严谨。
  3. 防止了命名污染(封装)。
  4. 便于调试。
  5. 使用方便,一次可以定义多个常量。
  • 我们可以去看很多项目的源码,会发现,里面很多用枚举来定义常量。

枚举的使用

enum Color//颜色
{
	 RED = 1,
	 GREEN = 2,
	 BLUE = 4
};

// 只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。
enum Color clr = GREEN;

clr = 5;

写在最后

虽然在现在阶段我们很难体会到枚举的好处,但是我们可以多去看看别人的代码,多去领悟一下枚举到底有什么用?这样我们使用起来也才会得心应手。

感谢阅读本小白的博客,错误的地方请严厉指出噢!


http://www.niftyadmin.cn/n/26717.html

相关文章

0-100 以内有几个 8

1 背景 2023 年春节即将到来,偶然看到小外甥在做寒假作业,有这么一道题: 0-100 以内有多少个 8? 众所周知,0-10 以内,仅有数字 8 为唯一答案,但是 0-100 以内有几个,还真没思考过。不由得摩拳擦掌,解出来这道题。 2 找规律 0-10以内 0 1 2 3 4 5 6 7 8 9 10^ 0-1…

JSON相关信息

1. json概述JSON,全称JavaScript Object Notation,一种轻量级的文本传输数据格式2. json两种数据形式json一般有两种数据形式:对象{}、数组[]2.1对象格式:var jsonexa{"名称":"值","名称":"值…

模板进阶篇

一、非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。如图: 非类型形参:就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可…

Java-容器

一、ListArrayList<>&#xff08;变长数组&#xff09;实现add( )&#xff1a;在末尾添加一个元素clear( )&#xff1a;清空size( )&#xff1a;返回长度isEmpty( )&#xff1a;是否为空get(i)&#xff1a;获取第i个元素set(i, val)&#xff1a;将第i个元素设置为val&…

①【Spring】一文了解IOC容器

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 一文掌握IOC一、IOC二、IOC容器的实现BeanFact…

C语言进阶(7)——联合体和枚举

文章目录1 枚举1.1 含义1.2 定义1.3 枚举的优点1.4 枚举的使用2 联合体&#xff08;共用体&#xff09;2.1 联合类型的定义2.2 联合体的特点2.3联合体大小的计算1 枚举 1.1 含义 枚举就是一一列举。 1.2 定义 枚举是定义常量&#xff0c;默认值 0&#xff0c;然后数自增。 …

【算法数据结构初阶篇】:位运算

算法中很多情况下需要用到各种位运算的转换&#xff0c;比如>>右移、<<左移、&与等等&#xff0c;下面我们利用这些位运算来进行一个进制转换&#xff0c;将一个int整形&#xff08;32位&#xff09;十进制转二进制&#xff0c;以及其他的一些转换技巧。 一、十…

Cron表达式介绍

Cron表达式介绍 cron 表达式本质上就是一个字符串&#xff0c;该字符串由 6 个空格分为 7 个域&#xff0c;每一个域代表一个时间含义。 通常定义 “年” 的部分可以省略&#xff0c;所以表达式常见形式是6个域。 根据“年”的部分是否省略&#xff0c;cron表达式通常有一下…