函数指针顾名思义就是指向一个函数的指针,下面是一个具体应用的例子
#include <iostream>
using namespace std;
int add(int i,int j){return i+j;}
int sub(int i,int j){return i-j;}
//将来可以加入其他函数
typedef int (*pFunc)(int,int); //pFunc是函数指针的类型
int DoOperation(pFunc pf, int i, int j)
{
return (*pf)(i,j); //等价于return pf(i,j); 函数名就如同数组名一样,本身就是一个指针 ,特地加上一个解引用来强调这是一个函数指针
}
int main()
{
cout<<"add1 result:"<<add(1,2)<<endl; //Okay
cout<<"add1 result:"<<(*add)(1,2)<<endl; //Okay, the same as above
pFunc p1 = add;
cout<<"add result:"<<p1(1,2)<<endl; //Okay
cout<<"add result:"<<(*p1)(1,2)<<endl; //Okay
pFunc p2 = sub;
cout<<"sub result:"<<p2(1,2)<<endl;
cout<<"add result2:"<<DoOperation(p1,1,2) <<endl;
system("PAUSE");
return 0;
}
这样设计的好处是,如果将来有新的实现模块,比如要加入乘法,除法,只需要加入新的函数实现即可,而其他程序员仍然只需要调用DoOperation()函数,传入特定的函数指针即可,这样子模块化之间松耦合,比较容易修改扩展。