当前位置: 首页 > news >正文

枚举类型详解

对于枚举类型,想必不少的读者,也是听过,但是,却没怎么见过如何使用!!所以,笔者打算用这一篇博客,来详细的讲解一下,枚举!!

对于枚举,顾名思义,就是一一列举,把可能的值一一列举!!

比如,我们现实生活中:

   一周的是:星期一到星期日,是有限的7天,可以一一列举

   性别有:男,女,保密,也可以一一列举!

    月份有1到12个月,也可以一一列举出来!

因此,在上述的情况下,就用到了枚举了!!


枚举定义的简单使用:描述星期

enum day   //星期
{
	mon,  //注意,这儿是逗号(,)!!
	tues,
	wed,
	thur,
	fri,
	sat,
	sun,
};

这里,需要注意的是:

1.枚举(enum)!

2。枚举的各种可能之间用逗号(,)隔开,   末尾的分号(;)系统自动携带,请不要删除!!

3.列举出来的是枚举的可能取值!!

描述性别:

enum sex  //性别
{
	male,
	famale,
	serect,
};

 描述颜色 :

enum color  //颜色
{
	red,
	green,
	blue,
};

下面,笔者用代码,来描述一下:枚举的类型的使用:

#include <stdio.h>

enum color  //颜色
{
	red,
	green,
	blue,
};

int main()
{
	enum color c = blue;

	return 0;
}

在枚举里面,每个可能只能出现一次,不能多次出现,就比如,今天是星期四,在这个星期里面,只有一天是星期四的情况!!


枚举的可能取值:每一个的可能取值是常量,不可以修改!!

#include <stdio.h>

enum color  //颜色
{
	red,
	green,
	blue,
};

int main()
{
	printf("red=   %d\n", red);    //0
	printf("green= %d\n", green);  //1
	printf("blue=  %d\n", blue);   //2


	return 0;
}

代码的运行结果,就可以很好的证明:枚举的可能取值是个常量!!请看代码的运行结果:

但是对于上述的代码:(更改的区别在于枚举类型中)

#include <stdio.h>

enum color  //颜色
{
	red=5,
	green,
	blue,
};

int main()
{
	printf("red=   %d\n", red);
	printf("green= %d\n", green);
	printf("blue=  %d\n", blue);


	return 0;
}

该段代码,仅仅是将:red=5进行了赋值,但是代码运转后的结果为:

枚举的可能取值:大小 依次往下增加1

但是,当全部都赋值的情况下,运行的结果又出现了反转:

#include <stdio.h>

enum color  //颜色
{
	red=5,
	green=9,
	blue=11,
};

int main()
{
	printf("red=   %d\n", red);
	printf("green= %d\n", green);
	printf("blue=  %d\n", blue);


	return 0;
}

代码的运行结果为:

 对比上面三个结果,我们可以看出来:枚举的可能取值以整型的形式存在!!

下面,我们对该枚举类型进行求一下所占字节的大小

#include <stdio.h>

enum color  //颜色
{
	red = 5,
	green = 9,
	blue = 11,
};

int main()
{
	printf("enmu color所占字节的大小为:%d\n", sizeof(enum color));

	return 0;
}

代码的运行结果为:

 在上面的代码所求的结果中,我们也可以看出来:

枚举类型,只可能取一个值(以整型的形式存在)取决于编译器!!


经过上述的详解,笔者总结出一下:

枚举类型的优点:

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

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

3.防止了命名污染(封装)

4.便于调试!

5.使用方便,一次可以定义多个常量!!

相关文章:

  • 机器学习笔记 - 在Vehicles数据集上训练 YOLOv5 目标检测器
  • win10系统安装虚拟机centos
  • 从零备战蓝桥杯——二叉树及相关题目(基础篇)
  • 软件企业和双软企业的区别
  • 字节跳动安全Ai挑战赛-基于文本和多模态数据的风险识别总结
  • DRF-(10)
  • java面试-GC垃圾回收机制
  • TOREX | 如何延长设备的电池寿命?——充电IC
  • 电路方案分析(十一)低电平(5uA)V-I转化器
  • 【Hadoop生态圈】8.Flink入门教程
  • 代码整洁之道,评审问题分享记录
  • 【调研】详解Transformer结构——Attention Is All You Need
  • Linux基础组件之消息协议设计概述
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • 微服务Spring Boot 整合 Redis 分布式锁 Redission 实现优惠卷秒杀 一人一单
  • 2019.2.20 c++ 知识梳理
  • crontab执行失败的多种原因
  • Hibernate最全面试题
  • IOS评论框不贴底(ios12新bug)
  • Netty 4.1 源代码学习:线程模型
  • nodejs调试方法
  • oschina
  • Phpstorm怎样批量删除空行?
  • React Native移动开发实战-3-实现页面间的数据传递
  • Redis在Web项目中的应用与实践
  • SpringBoot几种定时任务的实现方式
  • 分享一份非常强势的Android面试题
  • 聚类分析——Kmeans
  • 算法系列——算法入门之递归分而治之思想的实现
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 学习Vue.js的五个小例子
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 优化 Vue 项目编译文件大小
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (补)B+树一些思想
  • (附源码)ssm码农论坛 毕业设计 231126
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)Google的Objective-C编码规范
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)甲方乙方——赵民谈找工作
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET MVC之AOP
  • .net/c# memcached 获取所有缓存键(keys)
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • @JsonFormat与@DateTimeFormat注解的使用
  • @拔赤:Web前端开发十日谈
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题