常量符号化

用符号而不是具体的数字来表示程序中的数字

一、 枚举

用枚举而不是定义独立的const int变量

  1. 枚举是一种用户定义的数据类型,它用关键字enum如以下语句来声明
enum 枚举类型名字 {名字0 ,、、、 , 名字n};
  1. 枚举类型名字通常并不真的使用,要用的是在大括号里的名字,因为它们就是常量符号,他们的类型是int,值则依次从0到,如:
enum colors {red , yellow , green};
  1. 就创建了三个常量,red的值0,yellow是1,green是2
  2. 当需要一些可以排列起来的常量值时,定义枚举的意义就是给了这些常量值名字
#include <stdio.h>

enum color {red , yellow , green};

void f(enum color c);

int main(void)
{
enum color t = yellow; // scanf("%d" , &t);
f(t); return 0;
} void f(enum color c)
{
printf("%d\n", c);
} // 1
// 因为yellow的下标是1

注意:

  1. 枚举量可以作为值
  2. 枚举类型可以跟上enum作为类型
  3. 但是实际上是以整数来做内部计算和外部输入输出的

二、自动计数的枚举

这样需要遍历所有的枚举量或者需要建立一个用枚举量做下标的数组的时候很方便

enum COLOR {RED , YELLOW , GREEN , NumCOLLORS};

int main(int argc, char const *argv[])
{
int color = -1; char *ColorNames[NumCOLLORS] = {
"red" , "yellow" , "green"
};
char *colorName = NULL; printf("请输入你喜欢的颜色代码:\n");
scanf("%d" , &color); if(color >= 0 && color <NumCOLLORS){
colorName = ColorNames[color];
}else{
colorName = "nuknow";
} printf("你喜欢的颜色是%s\n", colorName); return 0;
} //请输入你喜欢的颜色代码:
//2
//你喜欢的颜色是green

三、枚举量

  1. 声明枚举量的时候可以指定值
  2. enum COLOR {RED=1 , YELLOW , GREEN = 5 , NumCOLLORS};
enum COLOR {RED=1 , YELLOW , GREEN = 5 , NumCOLLORS};

int main(int argc, char const *argv[])
{
printf("code for GREEN is %d\n" , GREEN);
return 0;
}
// code for GREEN is 5

四、枚举只是int

即使给枚举类型的变量赋不存在的整数值也没有任何error

enum COLOR {RED=1 , YELLOW , GREEN = 5 , NumCOLLORS};

int main(int argc, char const *argv[])
{
enum COLOR color = 0;
printf("code for GREEN is %d\n" , GREEN);
printf("and color is %d\n", color);
return 0;
}
// code for GREEN is 5
// and color is 0

枚举

  1. 虽然枚举类型可以当作类型使用,但是实际上很少使用
  2. 如果有意义上排比的名字,用枚举比const int 方便
  3. 枚举比宏好,因为枚举有int类型

C语言入门-枚举的更多相关文章

  1. Swift语言入门之旅

    Swift语言入门之旅  学习一门新的计算机语言,传统来说都是从编写一个在屏幕上打印"Hello world"的程序開始的.那在 Swift,我们使用一句话来实现它: printl ...

  2. c语言入门经典(第5版)

    文章转载:http://mrcaoyc.blog.163.com/blog/static/23939201520159135915734 文件大小:126MB 文件格式:PDF    [点击下载] C ...

  3. C语言学习书籍推荐《C语言入门经典(第5版)》下载

    霍尔顿 (Ivor Horton) (作者), 杨浩 (译者) 下载地址:点我 C语言是每一位程序员都应该掌握的基础语言.C语言是微软.NET编程中使用的C#语言的基础:C语言是iPhone.iPad ...

  4. Go 语言入门(一)基础语法

    写在前面 在学习 Go 语言之前,我自己是有一定的 Java 和 C++ 基础的,这篇文章主要是基于A tour of Go编写的,主要是希望记录一下自己的学习历程,加深自己的理解 Go 语言入门(一 ...

  5. 《JavaScript语言入门教程》记录整理:运算符、语法和标准库

    目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...

  6. 《JavaScript语言入门教程》记录整理:面向对象

    目录 面向对象编程 实例对象与 new 命令 this关键字 对象的继承 Object对象的方法 严格模式(strict mode) 本系列基于阮一峰老师的<JavaScrip语言入门教程> ...

  7. GO 语言入门(一)

    GO 语言入门(一) 本文写于 2020 年 1 月 18 日 Go 由 Google 工程师 Robert Griesemer,Rob Pike 和 Ken Thompson 设计的一门编程语言,第 ...

  8. 踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)

    1.前言与作者 首先声明,我是由于非常偶然的机会获得<C语言入门很简单>这本书的,绝对不是买的.买这种书实在丢不起那人. 去年这书刚出版时,在CU论坛举行试读推广,我当时随口说了几句(没说 ...

  9. 我为什么反对推荐新人编程C/C++语言入门?

    虽然我接触编程以及计算机时间比较早,但是正式打算转入程序员这个行当差不多是大学第四年的事情 从03年接触计算机,07年开始接触计算机编程, 期间接触过的技术包括 缓冲区溢出(看高手写的shellcod ...

随机推荐

  1. Java修炼——暂停线程的四个方法

    线程的获取方法:Thread.currentThread() 后面可以加上获取线程的名字 .getName() 这样就成功获取到了线程的名字.             Sleep会导致当前线程休眠一定 ...

  2. Spring Data初步--整合Hibernate

    Spring Data课程中的技术介绍 Hibernate: Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,它将 pojo 与数据库表建立映射关系 ...

  3. 尺取法two pointers

    目的:对给定的一个序列,在序列中寻找包含全部需求的.长度最小的一段子序列.一般用来解决具有单调性的区间问题. 时间复杂度:O(n) https://blog.csdn.net/lxt_lucia/ar ...

  4. 面试题-关于Java线程池一篇文章就够了

    在Java面试中,线程池相关知识,虽不能说是必问提,但出现的频次也是非常高的.同时又鉴于公众号"程序新视界"的读者后台留言让写一篇关于Java线程池的文章,于是就有本篇内容,本篇将 ...

  5. 布隆过滤器的demo

    /** * 缓存击穿 * @author * */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = ...

  6. Linux搭建NFS服务

    一.NFS服务简单介绍 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中, ...

  7. SpringBoot电商项目实战 — ElasticSearch接入实现

    如今在一些中大型网站中,搜索引擎已是必不可少的内容了.首先我们看看搜索引擎到底是什么呢?搜索引擎,就是根据用户需求与一定算法,运用特定策略从互联网检索出制定信息反馈给用户的一门检索技术.搜索引擎依托于 ...

  8. 实验:使用GDB查看结构体在内存中的存储方式

    结构体在内存中的表示形式是怎么样的? 结构体在内存中和普通变量存储没有太大的区别. 首先我们看看,计算机如何读取普通变量:   普通变量例如int是占据4个字节,计算机读内存的时候会从起始地址开始读, ...

  9. Linux远程目录挂载

    原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/ad99ab1d-1 ...

  10. Spring cloud ——EurekaServer

    Eureka作为服务注册与发现的组件,Eureka2.0已经闭源了,但是本教程还是以Eureka为核心进行展开. 1.三个模块 Spring Cloud Eureka是Spring Cloud Net ...