哪位高手能帮小弟我解释下,什么是指向函数的指针

谁能帮我解释下,什么是指向函数的指针
谁能帮我解释下,什么是指向函数的指针

------解决方案--------------------
转帖:
1,这两个概念都是简称,指针函数是指带指针的函数,即本质是一个函数。我们知道函数都又返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。其定义格式如下所示: 
  返回类型标识符 *返回名称(形式参数表) 
  { 函数体 } 
  返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。比如函数返回一个整型值,实际上也相当于返回一个指针变量的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。例如下面一个返回指针函数的例子: 
  #include 
  float *find(); 
  main() 
  { 
  static float score[][4]={{60,70,80,90},{56,89,34,45},{34,23,56,45}}; 
  float *p; 
  int i,m; 
  printf("Enter the number to be found:"); 
  scanf("%d",&m); 
  printf("the score of NO.%d are:\n",m); 
  p=find(score,m); 
  for(i=0;i<4;i++) 
  printf("%5.2f\t",*(p+i)); 
  } 
  float *find(float(*pionter)[4],int n)/*定义指针函数*/ 
  { 
  float *pt; 
  pt=*(pionter+n); 
  return(pt); 
  } 
  学生学号从0号算起,函数find()被定义为指针函数,起形参pointer是指针指向包含4个元素的一维数组的指针变量。pointer+1指向score的第一行。*(pointer+1)指向第一行的第0个元素。pt是一个指针变量,它指向浮点型变量。main()函数中调用find()函数,将score数组的首地址传给pointer. 
  2,“函数指针”是指向函数的指针变量,因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上一致的。函数指针有两个用途:调用函数和做函数的参数。函数指针的说明方法为: 
  数据类型标志符 (*指针变量名)(参数);注:函数括号中的参数可有可无,视情况而定。 
  下面的程序说明了函数指针调用函数的方法: 
  #include 
  int max(int x,int y){ return(x>y?x:y); } 
  void main() 
  { 
  int (*ptr)(); 
  int a,b,c; 
  ptr=max; 
  scanf("%d,%d",&a,&b); 
  c=(*ptr)(a,b); 
  printf("a=%d,b=%d,max=%d",a,b,c); 
  } 
  ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr是一个指针变量,不像函数名称那样是死的,它可以指向任何函数,就看你像怎么做了。在程序中把哪个函数的地址赋给它,它就指向哪个函数。而后用指针变量调用它,因此可以先后指向不同的函数,不过注意,指向函数的指针变量没有++和--运算,用时要小心。

------解决方案--------------------
函数指针是c语言的函数模板,定义泛形指针函数,运行是动态指定具体函数
------解决方案--------------------
you can pass the function pointer as a parameter into another function. For example,

#include <stdio.h>

typedef void (*MyFuncPtr)(const char*);

void hello(const char* s)
{
printf("hello, %s\n",s); 
}

void shakehand(const char* s)
{
printf("let's shake hands, %s\n", s); 
}

void printmessage(MyFuncPtr ptr, const char* s)
{
(*ptr)(s);
}

int main()
{
char * s = "peng_peng";

MyFuncPtr pf= hello;
printmessage(pf, s);
  
pf= shakehand;
printmessage(pf, s);
  
return 0;
}

------解决方案--------------------
此程序段运行完返回的是指针类型
------解决方案--------------------
就是函数的入口地址。
那么多函数,都装在代码段中,每一个函数肯定要有个起启位置吧?否则还不乱套了。
------解决方案--------------------
C/C++ code
 

#include "stdio.h"

/*一个函数*/
void print_hello()
{
  printf("hello\n");
}

int main()
{
  void (*pfun)() = &print_hello;  // 得到函数的指针

  (*pfun)();  // 用函数指针调用函数

  return 0;
}


[url=http://www.pconline.com.cn/pcedu/empolder/gj/c/0503/566020.html][/url]