在C++里面,相信很多初学的同学都会混淆这两个概念:函数指针,指针函数。
其实,顾名思义,函数指针就是—指向函数的一个指针,它的定义通常如下:
T (* fun )(T a, T b)
这是一个指向 “返回值为T类型,传入参数为两个T类型的函数"的指针。在实际使用中如下:
#include<iostream>
using namespace std;
int addFun(int a , int b)
{
return a+b;
}
int minusFun(int a,int b)
{
return a-b;
}
int main()
{
int(*myFun)(int a, int b);
int paramA = 2, paramB = 3;
myFun = addFun;
cout << myFun(paramA, paramB) << endl;
myFun = minusFun;
cout << myFun(paramA, paramB) << endl;
return 0;
}
在例子里面,myFun是一个指向了形如int (int,int)的函数的指针,所以在后面使用的时候能够直接指向addFun和minusFun,从而调用这两个函数。
注意:定义函数指针的时候一定要跟函数的原型相匹配,不然调用的时候会出错。
而指针函数,实体上还是一个函数,只是返回的数据类型是个指针而已。
Bjarne在他的The C++ Programming Language里面给出过一个助记的方法:把一个声明从右向左读
const int * p — p is a pointer to const int
这里其实也能引用一下这个方法,把 * 读成:a pointer to
那么,
T (* fun )(T a, T b) 则可以读成:fun is a pointer to T(T a , T b);
T * fun(T a, Tb) 则可读成: fun(T a,T b) returns a value is a pointer to T;
以上均为个人见解,如有错误,请纠正