#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中又用函数指针来调用这个函数,这种情况被称为函数回调。
在一个语句块中若只有函数不同,可以把这个语句块(变化的函数,与相同的若干语句)封装成另一个函数&#x