一,函数也有地址

一旦函数被编译并载入计算机中执行,它就会占用一块内存,这块内存有一个地址,因此此函数也有地址。

可以通过指针使用函数地址,就像可以使用变量的地址一样。

二,定义函数指针

定义一个指针指向一个无参数无返回值的函数。

void (*funcPtr)();

*funcPtr为什么需要括号,是因为

void *funcPtr()

表示一个返回类型为 void* 的函数funcPtr();

这里一旦定义了一个函数指针,在使用前必须给它赋一个函数的地址。

#include <iostream>
using namespace std;

void func()
{
cout << "func() called ..." << endl;
}

int main()
{
void (*fp)();
fp = func;
(*fp)();
void (*fp2)() = func;
(*fp2)();
return 0;
}

三,定义函数指针数组

#include <iostream>
using namespace std;

#define DF(N) void N() { \
cout << "function " #N " called ..." << endl; \
}

DF(a); DF(b); DF(c); DF(d); DF(e); DF(f); DF(g);

void (*func_table[])() = {a, b, c, d, e, f, g};

int main()
{
while (1)
{
cout << "press a key from 'a' to 'g' or 'q' to quit" << endl;
char c, cr;
cin.get(c);
cin.get(cr);
if (c == 'q')
break;
if (c < 'a' || c > 'g')
continue;
(*func_table[c - 'a'])();
}
return 0;
}

运行结果:

C++ 函数指针_#include