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,//2
	BLUE  //3
};

枚举的使用

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

#include<stdio.h>
enum Color//颜色
{
	RED,
	GREEN,
	BLUE 
};
int main()
{
	enum Color col = RED;
	
    printf("%d", col);   //打印RED的值为0
	
	return 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. 使用方便,一次可以定义多个常量
此外,今后我们利用枚举来设置程序的菜单会显得更加美观。

相关推荐

  1. 折半(题目)

    2024-01-10 17:10:01       46 阅读
  2. Kotlin

    2024-01-10 17:10:01       39 阅读
  3. C/C++

    2024-01-10 17:10:01       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-10 17:10:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-10 17:10:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-10 17:10:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-10 17:10:01       18 阅读

热门阅读

  1. 2023年十大零日漏洞攻击

    2024-01-10 17:10:01       30 阅读
  2. SQL SERVER 查询获取分组中时间最新的信息

    2024-01-10 17:10:01       37 阅读
  3. 第1章 图片与初用OpenCV

    2024-01-10 17:10:01       25 阅读
  4. 【设计模式】命令模式

    2024-01-10 17:10:01       43 阅读
  5. python每日学13:类代码编写基础

    2024-01-10 17:10:01       25 阅读
  6. rust嵌入式开发

    2024-01-10 17:10:01       30 阅读
  7. 【数据库原理】(20)查询优化概述

    2024-01-10 17:10:01       33 阅读