C语言入门-枚举
常量符号化
用符号而不是具体的数字来表示程序中的数字
一、 枚举
用枚举而不是定义独立的const int变量
- 枚举是一种用户定义的数据类型,它用关键字enum如以下语句来声明
enum 枚举类型名字 {名字0 ,、、、 , 名字n};
- 枚举类型名字通常并不真的使用,要用的是在大括号里的名字,因为它们就是常量符号,他们的类型是int,值则依次从0到,如:
enum colors {red , yellow , green};
- 就创建了三个常量,red的值0,yellow是1,green是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
注意:
- 枚举量可以作为值
- 枚举类型可以跟上enum作为类型
- 但是实际上是以整数来做内部计算和外部输入输出的
二、自动计数的枚举
这样需要遍历所有的枚举量或者需要建立一个用枚举量做下标的数组的时候很方便
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
三、枚举量
- 声明枚举量的时候可以指定值
- 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
枚举
- 虽然枚举类型可以当作类型使用,但是实际上很少使用
- 如果有意义上排比的名字,用枚举比const int 方便
- 枚举比宏好,因为枚举有int类型
C语言入门-枚举的更多相关文章
- Swift语言入门之旅
Swift语言入门之旅 学习一门新的计算机语言,传统来说都是从编写一个在屏幕上打印"Hello world"的程序開始的.那在 Swift,我们使用一句话来实现它: printl ...
- c语言入门经典(第5版)
文章转载:http://mrcaoyc.blog.163.com/blog/static/23939201520159135915734 文件大小:126MB 文件格式:PDF [点击下载] C ...
- C语言学习书籍推荐《C语言入门经典(第5版)》下载
霍尔顿 (Ivor Horton) (作者), 杨浩 (译者) 下载地址:点我 C语言是每一位程序员都应该掌握的基础语言.C语言是微软.NET编程中使用的C#语言的基础:C语言是iPhone.iPad ...
- Go 语言入门(一)基础语法
写在前面 在学习 Go 语言之前,我自己是有一定的 Java 和 C++ 基础的,这篇文章主要是基于A tour of Go编写的,主要是希望记录一下自己的学习历程,加深自己的理解 Go 语言入门(一 ...
- 《JavaScript语言入门教程》记录整理:运算符、语法和标准库
目录 运算符 算数运算符 比较运算符 布尔运算符 二进制位运算符 void和逗号运算符 运算顺序 语法 数据类型的转换 错误处理机制 编程风格 console对象和控制台 标准库 Object对象 属 ...
- 《JavaScript语言入门教程》记录整理:面向对象
目录 面向对象编程 实例对象与 new 命令 this关键字 对象的继承 Object对象的方法 严格模式(strict mode) 本系列基于阮一峰老师的<JavaScrip语言入门教程> ...
- GO 语言入门(一)
GO 语言入门(一) 本文写于 2020 年 1 月 18 日 Go 由 Google 工程师 Robert Griesemer,Rob Pike 和 Ken Thompson 设计的一门编程语言,第 ...
- 踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)
1.前言与作者 首先声明,我是由于非常偶然的机会获得<C语言入门很简单>这本书的,绝对不是买的.买这种书实在丢不起那人. 去年这书刚出版时,在CU论坛举行试读推广,我当时随口说了几句(没说 ...
- 我为什么反对推荐新人编程C/C++语言入门?
虽然我接触编程以及计算机时间比较早,但是正式打算转入程序员这个行当差不多是大学第四年的事情 从03年接触计算机,07年开始接触计算机编程, 期间接触过的技术包括 缓冲区溢出(看高手写的shellcod ...
随机推荐
- openstack网络(一)
什么是OpenStack Networking OpenStack网络的特性 交换机 路由器 负载均衡 防火墙 虚拟专用网络 网络功能虚拟化 网络类型 管理网络 API 网络 外部网络 访客网络 在一 ...
- 商品类目和商品大广告的Redis缓存
(dubbo)主要的实现类: 商品类目的Redis缓存 com.bjsxt.ego.portal.service.impl.PortalItemCatServiceImpl package com.b ...
- HDU4109-instruction agreement(差分约束-最长路+建立源点,汇点)
Ali has taken the Computer Organization and Architecture course this term. He learned that there may ...
- zabbix自动发现与自动注册、自定义监控
一.自动发现与自动注册在上面的介绍中,我们演示了手动添加一台主机的方法,虽然简单,但是当要添加的主机非常多时,也将变得非常繁琐,那么有没有一种方法,可以实现主机的批量添加呢,这样就会极大的提高运维效率 ...
- 谈一谈AOP面向切面编程
AOP是什么 : AOP面向切面编程他是一种编程思想,是指在程序运行期间,将某段代码动态的切入到指定方法的指定位置,将这种编程方式称为面向切面编程 AOP使用场景 : 日志 事务 使用AOP的好处是: ...
- [vue]初探生命周期
Vue 实例从创建到销毁的过程,就是生命周期.也就是从开始创建.初始化数据.编译模板.挂载Dom→渲染.更新→渲染.卸载等一系列过程,我们称这是 Vue 的生命周期. 一.创建/销毁,缓存 1.cre ...
- vue 双语言切换中,data内翻译文字不正常切换的解决方案
背景 有这么一个登录页面,相关功能如下: 支持双语言,点击切换语言 表单内部有一个自定义的select,里面option的label.value都是的名字由外部提供:其中预设的option的label ...
- 自建CA证书搭建https服务器
由于CA收费,所以可以自建CA,通过将CA导入浏览器实现https的效果,曾经12306购票就需要自行导入网站证书. 关于https 2015年阿里巴巴将旗下淘宝.天猫(包括移动客户端)全站启用HTT ...
- 【RabbitMQ】显示耗时处理进度
[RabbitMQ]显示耗时处理进度 通过网页提交一个耗时的请求,然后启动处理线程,请求返回.处理线程每完成一部分就给前台推送完成的数量,前端显示进度. 依赖jar <?xml version= ...
- 多线程之美5一 AbstractQueuedSynchronizer源码分析<一>
AQS的源码分析 目录结构 1.什么是CAS ? 2.同步器类结构 3.CLH同步队列 4.AQS中静态内部类Node 5.方法分析 5.1.acquire(int arg ) 5.2.rel ...