/*指向函数的指针做函数的参数 */
#include <stdio.h>
/*指向函数的指针变量的一个重要用途是把函数的地址作为参数传递到其他函数*/
#include <stdlib.h>
int main(void){
int max();
int min();
void fun(int x,int y,int(*p)(int,int));//也可以用int类型的函数类型
int add();
int a=34,b=-21,n;
printf("please choose 1,2 or 3,4:");
fflush(stdout);
scanf("%d",&n);
if(n==1)fun(a,b,max);
else if(n==2)fun(a,b,min);
else if(n==3)fun(a,b,add);
return 0;
}
void fun(int x,int y,int (*p)(int,int))
/*void也可以写成int,因为在调用max,min,add都有返回值fun函数正常执行*/
{
int result;
/*指针变量所对应的(*p)是函数实名,即(*p)(int,int)就是max(int x,int y),...
* 1.(*p)(x,y)相当于max/min/add(x,y)
* 2.在fun函数没有被调时,该函数的指针变量p并不占用内存空间,也不指向任何函数
* 3.函数fun被调用时,函数max/min/add的入口地址传送到fun函数,即指针p指向函数max/min/add
* 4.用指向函数的指针做函数参数的方法对于要调用"不固定函数"的函数是非常方便的*/
result=(*p)(x,y);
printf("%d\n",result);
}
int max(int x, int y){
int z;
if(x>y)z=x;
else z=y;
printf("max=");
return z;
}
int min(int x, int y){
int z;
if(x<y)z=x;
else z=y;
printf("min=");
return z;
}
int add(int x,int y){
int z;
z=x+y;
printf("sum=");
return z;
}
调试结果
please choose 1,2 or 3,4:1
max=34
please choose 1,2 or 3,4:2
min=-21
please choose 1,2 or 3,4:3
sum=13