选自《C++ Primer Plus(第六版)》
与数据项类似,函数也有地址。函数的地址是存储其机器语言代码的内存的开始地址。
1.函数指针的基础知识
首先通过一个例子来阐述这一过程。假设要设计一个名为estimate()的函数,估算编写指定行数的代码所需的时间,并且希望不同的程序员都将使用该函数。对于所有的用户来说,estimate()中一部分代码都是相同的,但该函数允许每个程序员提供自己的算法来估算时间。为了实现这种目标,采用的机制是,将程序员要使用的算法函数的地址传递给estimate()。为此,必须能够完成下面的工作:
- 获取一个函数的地址;
- 声明一个函数指针;
- 使用函数指针来调用函数
1.获取函数的地址
获取函数的地址很简单:只要使用函数名(后面不跟参数)即可。注意传递的是函数地址还是函数的返回值,假如think()是一个函数,那么有:
process(think); //passes address of think() to process
thought(think()); //passes return value of think() to thought
2.声明函数的指针
声明函数指针时,必须要指定函数的返回类型以及函数的特征标(参数列表)。例如:
double pam(int); //prototype
则正确的指针类型声明如下:
double (*pf)(int); //pf points to function that takes one int
//argument and that returns type double
pf=pam; //pf now points to the pam() function
这时pf就是函数指针,(*pf)就是函数。注意pam()的特征标和返回类型必须与pf相同。
ps:区分函数指针和返回指针的函数:
因为括号的优先级比*运算符高,因此*pf(in