与数据变量相似,函数也有地址,函数地址是存储函数机器语言代码内存开始的地址。接下来从三个方面来讲解函数指针。
1、获取函数的地址
获取函数地址很简单,只要使用函数名即可。即think()是函数,则think是该函数的地址,若想将函数作为参数来传递则必须传递函数名。一定要区分传递的是函数的返回值,还是函数名。
process(think); // 传递的是函数名
process(think()); // 传递的是函数返回值
2、声明函数的指针
声明的函数指针应指定函数返回值与函数的特征标如下例代码:
// 函数原型
double pam(int) ;
// 需声明的函数指针
double (*pf)(int);
注意 (*pf)的返回值和特征标与pam的类型必须相同。
3、使用指针来调用函数
现在进入最后一步,通过指针来调用所指向的函数。由于(*pf)相当于函数名,因此可以把它当做pam进行使用,即(*pf)(3)便为pam(3)。
double pam(int);
double (*pf)(int);
pf = pam;
double x = pam(4);
double y = (*pf)(5); // 使用函数指针呼叫pam()函数
// 实际上还可以这样用
double y = pf(5);
4、代码实例
using namespace std;
double besty(int);
double pam(int);
void estimate(int lines, double (*pf)(int));
int main()
{
int code;
cout << "输入代码的行数。\n";
cin >> code;
cout << "这是besty所估计的时间:\n";
estimate(code, besty);
cout << "这是pam所估计的时间:\n";
estimate(code, pam);
}
double besty(int lines)
{
return lines * 0.05;
}
double pam(int lines)
{
return 0.03 * lines + 0.0004 * lines * lines;
}
void estimate(int lines, double (*pf)(int))
{
cout << "你输入" << lines << "行代码所需的时间为:" << (*pf)(lines) << "h" << endl;
}