函数指针是一种在C、C++、D语言、其他类 C 语言和Fortran 2003中的指针。函数指针可以像一般函数一样,用于调用函数、传递参数。在如 C 这样的语言中,通过提供一个简单的选取、执行函数的方法,函数指针可以简化代码。
函数指针只能指向具有特定特征的函数。因而所有被同一指针运用的函数必须具有相同的参数和返回类型。
C语言标准规定,函数指示符(function designator,即函数名字)既不是左值,也不是右值。但C++语言标准规定函数指示符属于左值,因此函数指示符转换为函数指针的右值属于左值转换为右值。
除了作为sizeof或取地址&的操作数,函数指示符在表达式中自动转换为函数指针类型右值。因此通过一个函数指针调用所指的函数,不需要在函数指针前加取值或反引用(*)运算符。
以下为函数指针在C/C++中的运用
/* 例一:函式指標直接呼叫 */# ifndef __cplusplus # include <stdio.h># else # include <cstdio># endifint max(int x, int y){ return x > y ? x : y;}int main(void){ /* p 是函式指標 */ int (* p)(int, int) = & max; // &可以省略 int a, b, c, d; printf("please input 3 numbers:"); scanf("%d %d %d", & a, & b, & c); /* 與直接呼叫函式等價,d = max(max(a, b), c) */ d = p(p(a, b), c); printf("the maxumum number is: %d\n", d); return 0;}