C语言函数指针
函数指针的声明方法为:
函数类型 (标志符 指针变量名) (形参列表);
例:
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。
注2:函数括号中的形参可有可无,视情况而定。
完整的例子1:
#include <iostream> using namespace std; int max(int a, int b) { return a > b ? a : b; } int main() { int i = 1; int j = 3; int (*ptr)(int, int); ptr = max; cout << (* ptr)(i, j) << endl; return 0; }
ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你想怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数。不过注意,指向函数的指针变量没有++和--运算,用时要小心
但是,在某些编译器中这是不能通过的。这个例子的补充如下。
应该是这样的:
1.定义函数指针类型:
typedef int (*fun_ptr)(int,int);
2.申明变量,赋值:
fun_ptr max_func=max;
也就是说,赋给函数指针的函数应该和函数指针所指的函数原型是一致的。
完整实例
#include <iostream> using namespace std; int max(int a, int b) { return a > b ? a : b; } int main() { typedef int (*ptr)(int, int); ptr pm = max; int i = 1; int j = 3; cout << pm(i, j) << endl; return 0; }
参考文献:《函数指针》 http://baike.baidu.com/view/1604730.htm