现以add函数为例,如下:
int add(int a,int b){ printf("func....add:%d ",(a+b)); return a+b; }
通常定义一个函数指针类型,按如下格式即可调用:
typedef int (*MyFuncType)(int a,int b); //定义一个函数指针类型 MyFuncType myFuncType=add; cout<<myFuncType(2,4)<<endl;
或者直接定义一个函数指针
int (*p)(int a,int b); //定义一个函数指针 p=add; cout<<"调用函数指针:p : "<<p(4,5)<<endl;
在对比了函数指针的特性时,会发现,定义一个函数指针类型的过程比定义一个函数指针要复杂的多。但是在编写代码的时候,就会发现函数指针类型的强大作用。
#include"iostream" using namespace std; /* * 函数指针类型起到的作用 * 把函数的参数、函数的返回值提前做了约定。 * 以达到任务的调用者与任务的实现者达到解耦合 */ //子任务的执行者 int add(int a,int b){ printf("func....add:%d ",(a+b)); return a+b; } int sub(int a,int b){ printf("func....sub:%d ",(a-b)); return a-b; } int mut(int a,int b){ printf("func....mutiply:%d ",(a*b)); return a*b; } //定义一个函数指针类型 typedef int(*MyFuncType)(int a,int b); //函数指针做函数参数 间接调用 int function1(MyFuncType myFunctionType,int x,int y){ myFunctionType(x,y); } int function2(int (*MyFuncType2)(int a,int b),int x,int y){ int ret=MyFuncType2(x,y); return ret; } int main(){ /* MyFuncType myFuncType = NULL; myFuncType=add; myFuncType(1,2); */ //函数指针作为参数 function1(add,8,8); function1(sub,8,8); function1(mut,8,8); function2(add,8,8); function2(sub,8,8); function2(mut,8,8); return 0; }
从中可以发现,一旦函数过多时,我们可以将函数的实现与函数的调用者分离,使得开发具有逻辑性,同时这也体现了类似多态的特性。