函数指针有两个用途:调用函数、做函数的参数
C++ Primer Plus函数指针 7.18
//fun_ptr.cpp--pointers to functions
#include <iostream>
using namespace std;
double betsy(int);
double pam(int);
//second argument is pointer to a type double function that
//takes a type int argument
void estimate(int lines, double (*pf)(int));
int main()
{
int code;
cout << "How many lines of code do you need?\n";
cin >> code ;
cout << "Here's Betsy's estimate:\n";
estimate(code, betsy);
cout << "Here's Pam's estimate:\n";
estimate(code, pam);
return 0;
}
double betsy(int lns)
{
return 0.05 * lns;
}
double pam(int lns)
{
return 0.03 * lns + 0.0004 * lns * lns;
}
void estimate(int lines, double (*pf)(int))
{
cout << lines << "lines will take ";
cout << (*pf)(lines) << "hour(s) \n";
}
1.调用函数
#include <iostream>
using namespace std;
int add(int, int);
int main()
{
int (*ptrAdd)(int, int);//声明函数指针
ptrAdd = add;//让声明的函数指针指向具体的函数,以便调用
//则ptrPower可指向int(int,int)类型的函数。
//ptrPower前面有*,说明ptrPower是指针,右侧是形参列表,表示ptrPower指向的是函数,
//左侧为int,说明pf指向的函数返回值为int。
cout << "ptrAdd(3,4) = " << ptrAdd(3,4) << endl;//与其指向的函数用法无异
cout << "(*ptrAdd)(3,4) = " << (*ptrAdd)(3,4) << endl;//此处*pf两端括号必不可少
return 0;
}
int add(int num1 ,int num2)
{
int sum = num1 + num2;
return sum;
}
2.做函数的参数
#include <iostream>
using namespace std;
int add(int, int);
int fun(int, int(*)(int,int));
int main()
{
int (*ptrAdd)(int, int);//声明函数指针
ptrAdd = add;//让声明的函数指针指向具体的函数,以便调用
//则ptrPower可指向int(int,int)类型的函数。
//ptrPower前面有*,说明ptrPower是指针,右侧是形参列表,表示ptrPower指向的是函数,
//左侧为int,说明pf指向的函数返回值为int。
cout << "ptrAdd(3,4) = " << ptrAdd(3,4) << endl;//与其指向的函数用法无异
cout << "(*ptrAdd)(3,4) = " << (*ptrAdd)(3,4) << endl;//此处*pf两端括号必不可少
int result = fun(6, ptrAdd);//把指向函数add的函数指针ptrAdd作为函数fun的形参传入函数fun中
//int result = fun(6, add);//直接把函数add的地址作为函数fun的形参传入函数fun中,与上一句等效
cout << "result = " << result << endl;
return 0;
}
int add(int num1 ,int num2)
{
int sum = num1 + num2;
return sum;
}
int fun(int num3, int(*ptrFun)(int,int))
{
int result = num3 - (*ptrFun)(5,6);
return result;
}