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

C/C++ 枚举

目录

枚举概述

枚举的使用

枚举的大小计算

枚举的优点


C语言中的自定义类型有:结构   位段   枚举   联合

枚举概述

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

比如我们现实生活中:一周的星期一到星期日是有限的7天,可以一一列举。性别有:男、女、保密,也可以一一列举。月份有12个月,也可以一一列举

枚举定义:

enum Day//星期
{//枚举的可能取值//枚举的可能取值都是常量,不可修改Mon,    //注意是逗号Tues,Wed,Thur,Fri,Sat,Sun     //结尾并没有;
};
enum Sex//性别
{MALE,FEMALE,SECRET
};
enum Color//颜色
{RED,GREEN,BLUE
};

以上定义的 enum Day , enum Sex , enum Color 都是 枚举类型 。{} 中的内容是枚举类型的可能取值,也叫 枚举常量 (常量不可修改但是可以赋初值)  。这些可能取值都是有值的,默认从 0 开始,一次递增 1。当然在定义的时候也可以赋初值。

enum Color//颜色
{RED = 1,GREEN = 2,BLUE = 4
};// 某个值复制后,后面的值如果没有赋值默认增加1。
enum Color//颜色
{RED = 1,GREEN,//2BLUE  //3
};

枚举的使用

定义一个枚举类型的变量:

#include<stdio.h>
enum Color//颜色
{RED,GREEN,BLUE 
};
int main()
{enum Color col = RED;printf("%d", col);   //打印RED的值为0return 0;
}

既然RED的值为0,那我们能否将0赋值给col呢?enum Color col = 0;//这样是否可行呢?

运行之后,我的编译器编译成功而且顺利运行。

但是并不代表这个语法在所有编译器下都是正确的。这取决与编译器对语法的容忍程度。

所以,只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。

枚举的大小计算

之前计算结构体的大小时,结构体的成员都有明确的类型,结合内存对齐的知识就可以得到结构体的大小。而我们发现枚举里的成员都是常量没有类型,甚至貌似都没有一条完整的语句,那该如何计算呢?

	printf("%d", sizeof(enum Color));  

运行之后,其结果是4。

解释:回顾之前介绍枚举类型,枚举{}里面所列的是枚举的可能取值。

例如定义该枚举类型的变量:

enum Color col = BLUE;

col只能是{}中枚举的可能取值中的任意一个

而之所以结果是4,是因为在我所使用的编译器下常量大小为4字节。

枚举的优点

1. 增加代码的可读性和可维护性
2. 和 #define 定义的标识符相比较,枚举有类型检查,更加严谨。
3. 防止了命名污染(封装)
4. 便于调试
5. 使用方便,一次可以定义多个常量
此外,今后我们利用枚举来设置程序的菜单会显得更加美观。

http://www.lryc.cn/news/274938.html

相关文章:

  • P12 音视频复合流——TS流讲解
  • 三维重建 3D Gaussian Splatting:实时的神经场渲染
  • Django Web框架
  • ARCGIS PRO SDK GeometryEngine.Intersection的GeometryDimensionType 枚举
  • Web网页开发-CSS层叠样式表1-笔记
  • 如何预防变种.halo勒索病毒感染您的计算机?
  • 短网址的新玩法,短到只剩域名
  • FA2016AA (MHz范围晶体单元超小型低轮廓贴片) 汽车
  • 【设计模式之美】面向对象分析方法论与实现(一):需求分析方法论
  • MySQL视图索引执行计划相关十五道面试题分享
  • vue绑定背景颜色或背景图片 和 nuxtjs动态设置background-image:
  • 案例099:基于微信小程序的外卖小程序的研究与开发
  • 数据库的设计
  • 数据比较时String未转成BigDecimal的坑
  • MySQL第三战:CRUD,函数1以及unionunion all
  • 业务项目中Echarts图表组件的封装实践方案
  • 鸿蒙开发之拖拽事件
  • C#使用纯OpenCvSharp部署yolov8-pose姿态识别
  • [AutoSar]基础部分 RTE 04 数据类型的定义及使用
  • c#调试程序一次启动两个工程(多个工程)
  • 轻松搭建企业知识库:10款必备工具推荐
  • 第三天学习记录
  • 内核线程创建-kthread_create
  • uniappVue3版本中组件生命周期和页面生命周期的详细介绍
  • 任务驱动式编程
  • python数据可视化之折线图案例讲解
  • QT工具栏开始,退出
  • @Async正确使用姿势
  • 试除法判定质数算法总结
  • vuetify 回到顶部