C语言基础语法第六章指针 demo16_函数指针实战-回调函数
使用函数指针的好处:根据程序运行过程的不同情况,调用不同的函数
例有两个整数a和 b,由用户输入1,2或3。如输人1,程序就给出a和 b中大者,输人2,就给出a和b中小者,输人3,则求a与b之和。
!](https://img-blog.csdnimg.cn/8ec424fcc10347e1a6389a3ade4b0406.png)
#include <stdio.h>
#include <stdlib.h>
//使用函数指针的好处:根据程序运行过程的不同情况,调用不同的函数
//例有两个整数a和 b,由用户输入1,2或3。如输人1,程序就给出a和 b中大者,输人2,就给出a和b中小者,输人3,则求a与b之和。
int getMax(int data1, int data2)
{
return data1>data2 ? data1:data2;
}
int getMin(int data1,int data2)
{
return data1<data2 ? data1:data2;
}
int getSum(int data1,int data2)
{
return data1+data2;
}
int dataHandler(int data1,int data2,int (*pfunc)(int data1,int data2) )//将a,b的值和函数指针pfunc,传递到dataHandler函数中
//然后通过函数指针pfunc传递a,b的值 调用getMax,getMin,getSum函数
{
int ret;
ret = (*pfunc)(data1,data2);//在switch中pfunc根据输入条件分别指向getMax,getMin,getSum函数
//这里ret = (*pfunc)(data1,data2)等价于ret=(*pfunc)(10,20)= getMax(10,20)= getMin(10,20)= getSum(10,20)
return ret;
}
int main()
{
int a = 10;
int b = 20;
int cmd;
int ret;
int (*pfunc)(int data1,int data2);//定义函数指针
printf("请输入1(取大值),2(取小值),或者3(求和)");
scanf("%d",&cmd);
switch(cmd){
case 1:
pfunc = getMax;//输入1将函数指针pfunc指向getMax函数
break;
case 2:
pfunc = getMin;//输入2将函数指针pfunc指向getMin函数
break;
case 3:
pfunc = getSum;//输入3将函数指针pfunc指向getSum函数
break;
default:
printf("输入错误@请输入1(取大值),2(取小值),或者3(求和)");
exit (-1);
break;
}
ret = dataHandler(a,b,pfunc);
printf("ret = %d\n",ret);
return 0;
}