#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("0.推出\n");
printf("1.加\n");
printf("2.减\n");
printf("3.乘\n");
printf("4.除\n");
}
void cal(int (*p)(int,int))
{
int x=0,y=0;
printf("请输入两个操作数:");
scanf("%d%d",&x,&y);
printf("%d\n",p(x,y));
}
int main()
{
int in=0;
int x=0,y=0;
do
{
menu();
scanf("%d",&in);
switch(in)
{
case 0:
break;
case 1:
cal(add);
break;
case 2:
cal(sub);
break;
case 3:
cal(mul);
break;
case 4:
cal(div);
break;
}
}while(in);
return 0;
}
在这个例子中,cal接受了一个add函数的传参,用一个函数指针的变量来接受cal中又用函数指针来调用这个函数,这种情况被称为函数回调。
在一个语句块中若只有函数不同,可以把这个语句块(变化的函数,与相同的若干语句)封装成另一个函数,实现语句的简化。
专业表
这串代码可以用转移表的形式来写
int main()
{
int in=0;
int x=0,y=0;
int (*p[5])(int,int)={0,add,sub,mul,div};
do
{
men

本文通过一个实例解释了函数回调的概念,说明如何在cal函数中接收并调用传递的add函数。回调函数允许将不同的行为作为参数传递,简化代码结构。此外,提到了使用转移表来组织和调用函数,这种数据结构能够以更简洁的方式表达复杂的逻辑。
最低0.47元/天 解锁文章
1428

被折叠的 条评论
为什么被折叠?



