一,枚举
1.1 常量符号化
程序中用符号表达数字,增加程序的可读性?
#include<stdio.h>//能跑,但是报错不推荐将字符串转为CHAR**
const int red=0;
const int yellow=1;
const int green=2;
//为撒在前面?
int main(int argc,char const *argv[]){
//两个参数,整数,字符串数组【记不住 ,再复制一遍】
//整数告诉我们字符串数组有多大,数组带入函数需要另一个参数告诉大小
int color=-1;
char* colorName = NULL;
//不懂
printf("请输入你喜欢的颜色代码:\n");
scanf("%d",&color);
switch (color){
case red :colorName="red";break;
case yellow :colorName="yellow";break;
case green :colorName="green";break;
default :colorName="unknown";break;
}
printf("你喜欢的颜色是%s\n",colorName);
return 0;
}
输入数字,因为初始化了三个常量INT,输入数字赋值给COLOR,COLOR==1==1==YELLOW,就是COLOR==YELLOW,CHAR*COLORNAME是指针字符串,????直接给了被指的东西吗?
1.2 枚举
#include<stdio.h>
//其实只有头文件之前的变了
enum color{red,yellow,green} ;
//一般用大写区分常量
用户定义的数据类型,ENUM 枚举类型的名字{名字0,名字1,……名字N};分号
大括号里面的就是常量符号 ,CONST INT类型,值0--N,一个值有序排列的常量集合
#include<stdio.h>
enum color{red,yellow,green} ;//声明一种新的数据类型color
void f(enum color c);
//函数需要的参数是一个ENUM里面的常量?给常量名?
//这种类型使用的时候要带上NUME
int main(void){
enum color t=red;
scanf("%d",&t);
f(t);
return 0;
}
void f(enum color c){
printf("%d\n",c);
}
//输出常量的值
实际上是以整数来做内部计算和输入输出的
1.3 自动计数的枚举
#include<stdio.h>
enum COLOR{RED,YELLOW,GREEN,NumCOLORS};
int main(void){
int color=-1;
char* Cnames[NumCOLORS]={
"red","yellow","green"
};
char* colorName=NULL;
printf("请输入你喜欢的颜色代码:\n");
scanf("%d",&color);
if(color>=0&&color<NumCOLORS){
colorName=Cnames[color];
}else{
colorName="unknown";
}
printf("你喜欢个鬼颜色%s\n",colorName);
return 0;
}
这是什么东西啊丢!!!!!啊啊啊啊啊啊
#include<stdio.h>
// [Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]
enum COLOR{RED,YELLOW,GREEN,NumCOLORS};
//跟在最后的名字后面的字,他的值,就是前面的计数
//NumCOLORS=3?
//好像是一种固定写法,不能直接改成3,丢,讲黑话
int main(void){
int color=-1;
char* Cnames[NumCOLORS]={
"red","yellow","green"
};
//指针数组,下标是枚举量
char* colorName=NULL;
//初始化,0地址
printf("请输入你喜欢的颜色代码:\n");
scanf("%d",&color);
//数字
if(color>=0&&color<NumCOLORS){
colorName=Cnames[color];
}else{
colorName="unknown";
}
//遍历数组 Cnames,数字color和数组下标比较,如果相等,colorName指向那个数组单元
printf("你喜欢个鬼颜色%s\n",colorName);
printf("代号%d\n",colorName);
return 0;
}
所以这里ENUM一下,就是为了他自动计数?得到下标量,剩下的一点关系没有,改了ENUM的排序好像也没有什么关系
#include<stdio.h>
enum COLOR{YELLOW,GREEN,RED,NumCOLORS};
int main(void){
int color=-1;
char* Cnames[NumCOLORS]={
"red","yellow","green"
};
好像输出没什么影响,丢!!!啊啊啊啊啊
1.4 枚举量
#include<stdio.h>
enum CO{RED=1,YELLOW,GREEN=5,NumCOS};
enum COLOR{DSF,DD,FF,NumCOLORS};
//计数也是0-N
int main(int argc,char const* argv[]){
printf("code for GREEN is %d\n",GREEN);//5
printf(" %d\n",NumCOS);//6
printf(" %d\n",NumCOLORS);//3
return 0;
}
#include<stdio.h>
enum CO {RED=1,YELLOW,GREEN=5,NumCOS};
int main(int argc,char const* argv[]){
enum CO co=0;
//ERROR:invaild conversation from 'int' to 'CO'
//1,2,5是有意义的值,0,3,4,是没有意义的??
printf(" %d\n",co);
return 0;
}
我直接一个看不懂听不懂
虽然枚举类型可以当作类型使用,但是实际上很(bu)少(hao)用
如果有意义上排比的名字,用枚举比constint方便
枚举比宏(macro)好,因为枚举有int类型
是C里面没有那么成功的东西,主要就是用来定义符号量,而不是当作一种数据类型来使用?