[TOC]

概述

指针变量可以用来指向已定义变量的地址,再通过指针间接存取该变量的内容。其实在C++中,指针变量也可以声明为指向函数的起始地址,并借助该指针变量来调用函数。这种指向函数的指针变量被称为函数指针(Pointer of Function),主要是可使用同一个函数指针名称在程序运行期间动态地决定所要调用的函数。

声明函数指针

函数指针可能会让大家稍微伤点脑筋,不过多花点心思研究倒也不难。基本上,函数指针与一般指针一样,都是用来存储地址值的。当C++程序运行时,系统会给函数分配内存空间,用来存储该函数的程序代码。当调用该函数时,程序流程就会跳至此函数的起始地址,并从这个地址开始往下执行函数。

也就是说,函数名称其实也是一个指针变量,其本身所存储的值为函数内容所在内存的起始地址。如果将函数指针指向该函数的起始地址,就可以在程序中通过函数指针来调用该函数。函数指针的声明格式如下:

1
返回数据类型 (*函数指针名称)(参数1数据类型,参数2数据类型,…);

以下是函数指针的合法声明实例:

1
2
3
4
void (*ptr)(void); // ptr为函数指针,而此函数本身无返回值与参数
int (*ptr)(int); //ptr为函数指针,本身返回整数值,并接受整数参数
char* (*ptr)(char*);
//ptr为函数指针,本身返回字符指针,并接受字符指针作为参数