C++中的函数指针(指向函数的指针)
在 C++ 程序中,指针变量也可以指向函数。
函数在编译时会被分配给一个入口地址,使用指针变量指向该函数,后续即可通过指针调用此函数。
例如:
使用函数指针的形式如下:
【实例】计算平均值。先来看下如何通过普通函数求解平均值。定义 avg() 函数并在主函数中调用它。程序代码如下:
下面使用指针函数求解平均值。avg() 函数有两个参数和一个返回值,指针函数同样要有两个整型参数和一个整型返回值。程序代码如下:
函数在编译时会被分配给一个入口地址,使用指针变量指向该函数,后续即可通过指针调用此函数。
例如:
int sum(int x, int y) // 定义函数 sum(),有两个参数和一个返回值 int *a(int, int); // 定义函数指针 a,同样有两个参数和一个返回值 a = sum; // a 指向函数 sum()
使用函数指针的形式如下:
int c, d; // 定义两个整型变量 (*a)(c, d); // 调用指针 a 指向的 sum() 函数,c、d 为函数实参
【实例】计算平均值。先来看下如何通过普通函数求解平均值。定义 avg() 函数并在主函数中调用它。程序代码如下:
#include <iostream> #include <iomanip> using namespace std; int avg(int a, int b); int main() { int iWidth, iLength, iResult; int i = 10; int j = 30; iResult = avg(i, j); // 调用 avg() 函数 cout << iResult << endl; } int avg(int a, int b) // 定义 avg() 函数,计算平均值 { return (a + b) / 2; }运行结果为:
20
下面使用指针函数求解平均值。avg() 函数有两个参数和一个返回值,指针函数同样要有两个整型参数和一个整型返回值。程序代码如下:
#include <iostream> #include <iomanip> using namespace std; int avg(int a, int b); int main() { int iWidth, iLength, iResult; iWidth = 10; iLength = 30; int (*pFun)(int, int); // 定义函数指针 pFun pFun = avg; // pFun 指向函数 avg() iResult = (*pFun)(iWidth, iLength); // 调用 pFun 指向的函数,传入两个实参 cout << iResult << endl; } int avg(int a, int b) // 定义 avg() 函数,计算平均值 { return (a + b) / 2; }运行结果为:
20
pFun 是指向 avg() 函数的指针,调用 pFun 函数指针,就和调用 avg() 函数一样。