ui设计模板网站,手机app下载安装到手机,制作网页之前必须先建立的是,下载百度极速版免费安装情景进入
在编程的时候#xff0c;有些数据的取值往往是有限的#xff0c;只能是非常少量的整数#xff0c;并且最好为每个值都取一个名字#xff0c;以方便在后续代码中使用#xff0c;比如一个星期只有七天#xff0c;一年只有十二个月#xff0c;一个班每周有六门课…情景进入
在编程的时候有些数据的取值往往是有限的只能是非常少量的整数并且最好为每个值都取一个名字以方便在后续代码中使用比如一个星期只有七天一年只有十二个月一个班每周有六门课程等。
以每周七天为例我们可以使用#define命令来给每天指定一个名字
#include stdio.h#define Mon 1
#define Tues 2
#define Wed 3
#define Thurs 4
#define Fri 5
#define Sat 6
#define Sun 7int main(){int day;scanf(%d, day);switch(day){case Mon: puts(Monday); break;case Tues: puts(Tuesday); break;case Wed: puts(Wednesday); break;case Thurs: puts(Thursday); break;case Fri: puts(Friday); break;case Sat: puts(Saturday); break;case Sun: puts(Sunday); break;default: puts(Error!);}return 0;
}运行结果
5↙
Friday#define命令虽然能解决问题但也带来了不小的副作用导致宏名过多代码松散看起来总有点不舒服。C语言提供了一种枚举Enum类型能够列出所有可能的取值并给它们取一个名字。
枚举类型的定义形式为
enum typeName{ valueName1, valueName2, valueName3, ...... };enum是一个新的关键字专门用来定义枚举类型typeName是枚举类型的名字valueName1, valueName2, valueName3, …是每个值对应的名字的列表。注意最后的;不能少。
例如列出一个星期有几天
enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };可以看到我们仅仅给出了名字却没有给出名字对应的值这是因为枚举值默认从 0 开始往后逐个加 1递增也就是说week 中的 Mon、Tues … Sun 对应的值分别为 0、1 … 6。
我们也可以给每个名字都指定一个值
enum week{ Mon 1, Tues 2, Wed 3, Thurs 4, Fri 5, Sat 6, Sun 7 };更为简单的方法是只给第一个名字指定值
enum week{ Mon 1, Tues, Wed, Thurs, Fri, Sat, Sun };这样枚举值就从 1 开始递增跟上面的写法是等效的。
枚举是一种类型通过它可以定义枚举变量
enum week a, b, c;也可以在定义枚举类型的同时定义变量
enum week{ Mon 1, Tues, Wed, Thurs, Fri, Sat, Sun } a, b, c;有了枚举变量就可以把列表中的值赋给它
enum week{ Mon 1, Tues, Wed, Thurs, Fri, Sat, Sun };
enum week a Mon, b Wed, c Sat;或者
enum week{ Mon 1, Tues, Wed, Thurs, Fri, Sat, Sun } a Mon, b Wed, c Sat;示例 判断用户输入的是星期几。
#include stdio.hint main(){enum week{ Mon 1, Tues, Wed, Thurs, Fri, Sat, Sun } day;scanf(%d, day);switch(day){case Mon: puts(Monday); break;case Tues: puts(Tuesday); break;case Wed: puts(Wednesday); break;case Thurs: puts(Thursday); break;case Fri: puts(Friday); break;case Sat: puts(Saturday); break;case Sun: puts(Sunday); break;default: puts(Error!);}return 0;
}运行结果
4↙
Thursday特别注意 1 . 枚举列表中的 Mon、Tues、Wed 这些标识符的作用范围是全局的严格来说是 main() 函数内部不能再定义与它们名字相同的变量。
2 . Mon、Tues、Wed 等都是常量不能对它们赋值只能将它们的值赋给其他的变量。
枚举和宏其实非常类似宏在预处理阶段将名字替换成对应的值枚举在编译阶段将名字替换成对应的值。我们可以将枚举理解为编译阶段的宏。
对于上面的代码在编译的某个时刻会变成类似下面的样子
#include stdio.hint main(){enum week{ Mon 1, Tues, Wed, Thurs, Fri, Sat, Sun } day;scanf(%d, day);switch(day){case 1: puts(Monday); break;case 2: puts(Tuesday); break;case 3: puts(Wednesday); break;case 4: puts(Thursday); break;case 5: puts(Friday); break;case 6: puts(Saturday); break;case 7: puts(Sunday); break;default: puts(Error!);}return 0;
}Mon、Tues、Wed 这些名字都被替换成了对应的数字。这意味着Mon、Tues、Wed 等都不是变量它们不占用数据区常量区、全局数据区、栈区和堆区的内存而是直接被编译到命令里面放到代码区所以不能用取得它们的地址。这就是枚举的本质。
枚举类型变量需要存放的是一个整数它的长度和 int 应该相同下面来验证一下
#include stdio.hint main(){enum week{ Mon 1, Tues, Wed, Thurs, Fri, Sat, Sun } day Mon;printf(%d, %d, %d, %d, %d\n, sizeof(enum week), sizeof(day), sizeof(Mon), sizeof(Wed), sizeof(int) );return 0;
}运行结果
4, 4, 4, 4, 4