一、复合类型:枚举
1.1.枚举的本质就是一堆整数的集合,列表,就是给整数取了个别名,提高代码的可读性,枚举值默认是从0开始,后面的成员依次加1
例如:250(不具体)---通过枚举的方式----->坏蛋BAD EGG(250的别名)
0-------通过枚举的方式------------->红色RED(0的别名)
1-------通过枚举的方式------------->绿色GREEN(1的别名)
2-------通过枚举的方式------------->蓝色BLUE(2的别名)
1.2.声明枚举数据类型的语法:
enum 枚举数据类型名 {枚举值}; (可以不起名)
例如:enum COLOR {RED, GREEN, BLUE};
结果:RED=0,GREEN=1,BLUE=2 等价于给0,1,2取别名
printf("%d %d %d\n", RED, GREEN, BLUE); //0,1,2
例如:
enum COLOR {RED, GREEN=250, BLUE};
结果:RED=0,GREEN=250,BLUE=251 等价于给0,250,251取别名
printf("%d %d %d\n", RED, GREEN, BLUE); //0,250,251
结论:将来程序中再描述红,绿,蓝三种颜色,就不需要用0,1,2(代码可读性非常差),用RED, GREEN,BLUE替换0,1,2
1.3.枚举的经典使用代码方式
vim enum2.c 添加
#include <stdio.h>
/*定义检测函数*/
int check(int a)
{
if(a != 0) {
printf("表示成功了.\n");
return 0; //表示成功
} else {
printf("表示失败了.\n");
return 1; //表示失败
}
}
int main(void)
{
printf("%d\n", check(1));
return 0;
}
提高代码可读性可以采用枚举方法,也就是给0和1取别名:RETURN_OK,RETURN_BAD
改进以后的代码:
vim enum3.c 添加
#include <stdio.h>
//定义枚举数据类型
enum RETURN {RETURN_OK, RETURN_BAD};
//对枚举数据类型取别名
typedef enum RETURN return_t;
/*定义检测函数*/
return_t check(int a)
{
if(a != 0) {
printf("表示成功了.\n");
return RETURN_OK; //表示成功
} else {
printf("表示失败了.\n");
return RETURN_BAD; //表示失败
}
}
int main(void){
printf("%d\n", check(1));
printf("%d\n", check(0));
return 0;
}
二、函数指针
2.1.指针函数
概念:就是一个函数,只是它的返回值是一个指针
例如:int *add(int a, int b)
b)函数名就是整个函数里面代码的首地址,简称函数的首地址
int add(int a, int b)
{printf("%d\n", a);
printf("%d\n", b);
return a + b;
}
add这个函数名就是整个函数add的首地址,就是三条语句的首地址,等于第一条语句,printf函数所在内存的首地址
2.2.函数指针
概念:本质就是一种程序员自己定义的数据类型(跟int,结构体数据类型一样的)它保存着一个函数的地址
2.3.函数指针数据类型声明的语法:(不会分配内存并且大型程序中写头文件)
返回值数据类型 (*函数指针名)(形参表);
例如:
int (*pfunc)(int a, int b); //pfunc就是一种数据类型,当成int型来使用
或