#include<stdio.h>
int add(int a, int b)
{
return a+b;
}
int sub(int a, int b)
{
return a-b;
}
/*参数是函数指针的函数*/
int f1(int a, int b,int (*pf)(int, int))
{
return pf(a,b);
}
int sum;
/*参数是函数指针,返回值是指针的函数*/
int *f2(int a, int b, int (*pf)(int, int))
{
sum = pf(a,b);
return sum;
}
/*这是一个返回函数指针的函数
函数指针所指向的函数参数是(int, int),返回值是int */
//int (*pf)(int, int) f3(int a, int b, int (*pf)(int, int))
//int (int, int) * f3(int a, int b, int (*pf)(int, int))
int (*f3(int a, int b, int(*pf)(int, int)))(int, int)
{
sum = pf(a,b);
return pf;
}
int main()
{
int x = 10;
int y = 20;
int (*pfunc[2])(int, int);//定义函数指针数组
int (*fp[2])(int, int);//定义函数指针
int (*(*fp3[2])(int a, int b, int(*pf)(int, int)))(int, int);
//定义函数指针数组,指向这个函数的原型返回是一个函数指针
fp3[0] = f3;
fp3[1] = f3;
fp[0] = fp3[0](x,y,add);//返回函数指针,让fp[0]->int pf(int, int)
fp[1] = fp3[1](x,y,sub);//
pfunc[0] = add;
pfunc[1] = sub;
printf("pfunc[0]:x + y = %d\n",(*pfunc[0])(x,y));
printf("pfunc[1]:x - y = %d\n",(*pfunc[1])(x,y));
printf("fl: x + y = %d\n",f1(x,y,pfunc[0]));
printf("fl: x - y = %d\n",f1(x,y,pfunc[1]));
printf("f2: x + y = %d\n",*f2(x,y,pfunc[0]));
printf("f2: x - y = %d\n",*f2(x,y,pfunc[1]));
printf("f3: x + y = %d\n",fp[0](x,y));
printf("f3: x + y = %d\n",fp[1](x,y));
}