在 C++ 中,函数指针是一个 指针,该指针存放的是一个 函数 的地址,而函数的名称就是函数的入口,即地址,要注意与指针函数的区别。
指针函数是指带指针的函数,即本质是一个函数,指针函数是返回指向某种类型指针的函数,如 int * pFunc(int a)
就是一个指针函数。
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;
}
程序运行后,控制台输出如下图所示:
我们首先,定义了一个函数 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) = ∑
int retSum1 = pSum(num1, num2);
int retSum2 = pSum2(num1, num2);
cout << "pSum = " << pSum << " pSum2 = " << pSum2 << endl;
cout << "retSum1 = " << retSum1 << " retSum2 = " << retSum2 << endl;
return 0;
}
程序运行后,控制台输出如下图所示:
这次,我们在 main 函数里面定义了两个函数指针,这两个函数指针分别指向了函数名,和函数名的地址,最后,我们调用了函数指针,实现了求两个数的和。
同时,我们可以看到,对函数名取地址和直接打印函数名,最终的结果一致。
在 C++ 中,函数指针是一个指针,该指针存放的是一个函数的地址,而函数的名称就是函数的入口,即地址。