请声明一个变量保存一个人的性别 ,一个人的学历,一个方向,这样用 char 类型是不是不能全部给保存下,性别有男女两个值,但是你定义一个也只能保存一个值
某些变量的取值是限定的,变量的取值只能是指定的几个值当中的任意一个,除此之外的不行
C语言没有提供那么我就自己定义一个限定取值的类型,枚举就可以
作用:支持程程序员新创建一个类型,限定取值,比如使用结构体创建一个新的类型,置顶这个类型的变量只能存储东南西北中的任意一个,除此之外的不行
如何使用枚举创建一个新的类型,来达到限定的取值
语法格式:
// 定义枚举类型的语法格式
/*
enum 新数据类型的名称 {
取值 1,
取值 2,
取值 3,
取值 4
}
*/
enum fangxiang{
east,
west,
south,
north
}
表示创建了一个数据类型,这个数据类型的名称叫做 enum fangxiang,可以声明这个类型的变量,这个变量中就只能存储这其中指定的任意一个
声明一个枚举类型的变量
enum fangxiang dir ;
enum fangxiang dir = east; // 这不是字符串,存储的是
printf("dir = %d\n",dir);
枚举的作用域
如果将枚举类型定义在函数内部,那么这个类型就只能在函数内部使用,定义在函数外部才可以给所有的函数使用
枚举项,都偶有一个对应的整形的数,默认从 0 开始依次递增
有多大?无论是什么类型的枚举变量都是占据 4 个字节
存储的是什么?枚举变量当中真正存储的是整形的变量,所以才可以使用%d 打印出来
如果你就要打印枚举值的话,写判读是 0 打印第一值,1 打印第二值
既然存储的是一个整形的数,那么我们也可以存储大于枚举项的整数值,但是我们并不会这样做,这样可读性高
默认情况下,每一个枚举值对应的整形的数从 0 开始依次递增,但是我们也可以指定整形的数
enum xueli{
xiaoxue = 10,
chuzhong = 20,
gaozhong = 30,
daxue = 4
};
enum Gender{
GenderMan,
GenderWomen
};
enum Gender xiaoMing = GenderMan;
typedef int intNew;
intNew a = 10;
printf("a = %i\n",a); // 这个时候 intNew 完全等价于 int
unsigned long long int num = 10;
typedef unsigned long long int ulli;
ulli num1 = 10; // 简化数据类型的名称i哦
// 定义完结构体再取别名
struct Student{
char *name;
int age;
int score;
};
typedef struct Student Student;
Student s1 = {"小明",18,100};// 直接使用别名就可以了
// 直接在定义结构体类型的时候就取个别名
typedef struct Birth{
int year;
int month;
int day;
} Birth;
Birth xiaoLan = {2020,8,4};
typedef struct {
int height;
int weight;
} tiJi;
tiJi picture = {2,4};
enum fangXiang{
fangXiangEast,
fangXiangWest,
fangXiangSort,
fangXiangNorth
};
typedef enum fangXiang fangXiang;
fangXiang f1 = fangXiangEast;
// 第二种
typedef enum Gender{
GenderMan,
GenderWomen
} Gender;
Gender g1 = GenderMan;
// 第三种
typedef enum{
xiaoxue,
gaozhong,
daxue
} xueLi;
xueLi x1 = xiaoxue;
原文:https://www.cnblogs.com/shanshan-test/p/13207620.html