函数指针初步
先引用一下《C++ Primer Plus 》中对函数指针的介绍:“与数据项类似,函数也有地址。函数的地址是存储其机器语言代码的内存的开始地址。”一般而言我们不关心函数代码的地址,而专注于函数的具体实现,但是在看px4原生固件启动代码文件中,我发现代码中会用函数指针来对定义的宏(nsh_main入口函数)格式进行限制,所以专门看了函数指针这一块。如果不是直接调用函数,而是通过使用函数指针的方式,我们需要做三步:
1. 获取函数的地址
2. 声明一个函数指针
3. 使用函数指针来调用函数
需要注意的是,和数组类似,函数名实际上就是函数的地址,看下面的例子:
process(think)
process(think())
这里面第一个是调用think函数,因为函数名就是地址,是通过函数指针方式调用函数,而第二个process(think())则是以think函数的返回值作为process()的参数的,现在如果我们要怎么声明一个函数指针呢?很简单,见下面:
double pam(int);//prototype
double (*pf)(int);//function pointer
pf=pam
上面就将pf指向了pam()函数,为此我写了一个简单的Hello World!来看一下函数指针的效果:
#include <iostream>
using namespace std;
void PRIN();
void INVOKE(vo