首先,我们先了解清楚,什么是回调函数:
定义:回调函数就是一个通过 函数指针 调用的函数。
通俗易懂的说,回调函数就是一个代理商(发言人)。‘ 代理商 ’ 就是我们今天的主角-->回调函数;‘ 提供货源的人 ’ 就是函数指针。
就好像去商店买一支笔。我们通过商店购买到了笔,但是笔不是商店制造的,而是工厂制造的。‘ 商店 ’ 也就是回调函数;‘ 工厂 ’ 也就是函数指针。
#include <stdio.h>
int add(int x, int y) //工厂一号
{
return x + y;
}
int sub(int x, int y) //工厂二号
{
return x - y;
}
int mul(int x, int y) //工厂三号
{
return x * y;
}
int div(int x, int y) //工厂四号
{
return x / y;
}
void menu() //菜单选项
{
printf("************************\n");
printf("************************\n");
printf("**** 1.ADD 2.Sub ******\n");
printf("**** 3.Mul 4.Div ******\n");
printf("**** 0.exit ******\n");
printf("************************\n");
}
void calc(int (*pt) (int, int)) //代理商(发言人)--->回调函数
{
int x, y;
int ret = 0;
printf("请输入两个整型数字:");
scanf("%d%*c%d", &x, &y);
ret = pt(x, y);
printf("%d\n", ret);
}
int main()
{
int input = 1;
do
{
menu();
printf("请输入要进行的操作:");
scanf("%d", &input);
printf("\n");
switch (input)
{
case 0:
printf("程序结束\n");
break;
case 1:
calc(add);
break;
case 2:
calc(sub);
break;
case 3:
calc(mul);
break;
case 4:
calc(div);
break;
default:
printf("输入错误,请重新输入:");
}
} while (input);
return 0;
}
我们要理解,回调函数并不会有直接的结果回馈,而是在特定的事件或者条件发生时,然后去调用函数,调用函数返回的值-->作为对该事件或条件进行响应。
在这个代码案例,只有条件 ‘ 0 / 1 / 2 / 3 / 4 / default ’ 发生时,我们才会去使用回调函数。‘ 工厂一、二、三、四号 ’ 的返回值,作为回调函数对该条件的响应。
*************************************************************************
总结 :使用回调函数时,要注意条件(事件)的情况。