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

 

posted on 2012-08-18 15:46  aho  阅读(282)  评论(0编辑  收藏  举报

导航