首先定义一个函数指针pf,包括参数列表和返回值,完整形式为:int (*pf) (int,int) ,参数为两个整型变量,返回值为整型。
在主函数中将指针指向同类型函数地址,即可以指向原函数调用入口;
接着用typedef声明一个函数My_add,用My_add声明的add2函数名接口实现函数的定义。
运行输出结果如下:
#include<stdlib.h>
#include<stdio.h>
int add1(int,int); //函数声明
int (*pf)(int,int); //定义一个函数指针
void fun1(int,int(*)(int,int)); //函数声明,参数含有函数指针
typedef int My_add(int a,int b); //声明一个包含两个整形参数,返回值为int的函数
My_add add2; //声明一个同名函数
void fun2(int n,My_add*);//同fun1
int main(int argc,char*argv[]){
int n=10;
pf=add1; //函数指针指向同类型函数地质
fun1(n,pf);
fun2(n,add2);
pf=add2;
fun2(n,pf);
return 0;
}
int add1(int a,int b){ //函数定义
return a+b;
}
void fun1(int n,int (*pf)(int,int)){
int sum=0;
for(int i=0;i<n;++i){
int t=pf(i,i);
sum+=t;
}
printf("this is fun1,sum=%d\n",sum);
return ;
}
int add2(int a,int b){
return a+b;
}
void fun2(int n,My_add*add2){
int sum=0;
for(int i=0;i<n;++i){
int t=add2(i,i);
sum+=t;
}
printf("this is fun2,sum=%d\n",sum);
return ;
}