C++函数指针

C++函数指针教程

C++ 中,函数指针是一个 指针,该指针存放的是一个 函数 的地址,而函数的名称就是函数的入口,即地址,要注意与指针函数的区别。

指针函数是指带指针的函数,即本质是一个函数,指针函数是返回指向某种类型指针的函数,如 int * pFunc(int a) 就是一个指针函数。

C++函数指针详解

定义

returnType (*funcName) (paramType param);

参数

参数 描述
returnType 该函数的返回类型。
funcName 函数名。
paramType 函数参数的类型。
param 函数参数。

说明

我们定义了一个函数指针 funcName,其返回值类型为 returnType,接受一个 paramType 类型的参数。

案例

定义函数指针

定义一个函数指针,并调用

#include <iostream> using namespace std; int sum(int num1, int num2) { return num1 + num2; } int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; int a = 1024, b = 1100; int retSum = sum(a, b); cout << "retSum = " << retSum << " Sum = " << sum << endl; return 0; }

程序运行后,控制台输出如下图所示:

43_C函数指针.png

我们首先,定义了一个函数 sum,该函数接受两个 int 类型的参数,并返回这两个 int 类型参数的和。接着,我们在 main 函数定义了两个 int 类型的变量,并使用 sum 函数进行求和。

最后,我们打印了求得的和以及打印了函数名,最后,我们发现其实函数名,就是一个地址,既然是一个地址,那我们就可以使用一个指针来保存函数名的地址,我们修改程序如下:

#include <iostream> using namespace std; int sum(int num1, int num2) { return num1 + num2; } int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; int num1 = 100, num2 = 200; int (*pSum)(int a,int b) = sum; int (*pSum2)(int a, int b) = &sum; int retSum1 = pSum(num1, num2); int retSum2 = pSum2(num1, num2); cout << "pSum = " << pSum << " pSum2 = " << pSum2 << endl; cout << "retSum1 = " << retSum1 << " retSum2 = " << retSum2 << endl; return 0; }

程序运行后,控制台输出如下图所示:

44_C函数指针.png

这次,我们在 main 函数里面定义了两个函数指针,这两个函数指针分别指向了函数名,和函数名的地址,最后,我们调用了函数指针,实现了求两个数的和。

同时,我们可以看到,对函数名取地址和直接打印函数名,最终的结果一致。

C++函数指针总结

在 C++ 中,函数指针是一个指针,该指针存放的是一个函数的地址,而函数的名称就是函数的入口,即地址。