C语言函数指针和回调函数
一、函数指针
1.函数类型
2.函数指针(指向函数的指针)
int my_func(int a,int b){
printf("ret:%d\n", a + b);
return 0;
}
//1. 先定义函数类型,通过类型定义指针
void test01(){
typedef int(FUNC_TYPE)(int, int);
FUNC_TYPE* f = my_func;
//如何调用?
(*f)(10, 20);
f(10, 20);
}
//2. 定义函数指针类型
void test02(){
typedef int(*FUNC_POINTER)(int, int);
FUNC_POINTER f = my_func;
//如何调用?
(*f)(10, 20);
f(10, 20);
}
//3. 直接定义函数指针变量
void test03(){
int(*f)(int, int) = my_func;
//如何调用?
(*f)(10, 20);
f(10, 20);
}
3.函数指针数组
4.函数指针做函数参数(回调函数)
int plus(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a * b;
}
int division(int a, int b)
{
return a / b;
}
//函数指针 做函数的参数 --- 回调函数
void Calculator(int(*myCalculate)(int, int), int a, int b)
{
int ret = myCalculate(a, b); //dowork中不确定用户选择的内容,由后期来指定运算规则
printf("ret = %d\n", ret);
}
void test01()
{
printf("请输入操作符\n");
printf("1、+ \n");
printf("2、- \n");
printf("3、* \n");
printf("4、/ \n");
int select = -1;
scanf("%d", &select);
int num1 = 0;
printf("请输入第一个操作数:\n");
scanf("%d", &num1);
int num2 = 0;
printf("请输入第二个操作数:\n");
scanf("%d", &num2);
switch (select)
{
case 1:
Calculator(plus, num1, num2);
break;
case 2:
Calculator(sub, num1, num2);
break;
case 3:
Calculator(mul, num1, num2);
break;
case 4:
Calculator(division, num1, num2);
break;
default:
break;
}
}