您的位置:首页 > 其它

指针函数与函数指针数组

2012-07-10 16:20 176 查看
“指针函数”是指返回值是指针的函数。

Example:

#include<iostream>

  using namespace std;

  void main()

  {

  float *find(float(*pionter)[4],int n); /* 函数声明 */

  static float score[][4]={{60,70,80,90},{56,89,34,45},{34,23,56,45}};

  float *p;

  int i,m;

  cout<<"Enter the number to be found:";

  cin>>m;

  p=find(score,m);

  for(i=0;i<4;i++)

  cout<<" "<<*(p+i);

  }

  float *find(float(*pionter)[4],int n)/*定义指针函数*/

  {

  float *pt;

  pt=*(pionter+n);

return(pt);

}

============================================================

“函数指针数组”首先它是个数组,不过数组的元素是函数指针。“函数指针”是指向函数的指针变量。
Example:

 #include <stdio.h>

  int add1(int a1,int b1); /*函数声明*/

  int add2(int a2,int b2); /*函数声明*/

  void main()

  {

  int numa1=1,numb1=2;

  int numa2=2,numb2=3;

  int (*op[2])(int a,int b);

  op[0]=add1;

  op[1]=add2;

  printf("%d %d\n",op[0](numa1,numb1),op[1](numa2,numb2));

  }

  int add1(int a1,int b1)

  {

  return a1+b1;

  }

  int add2(int a2,int b2)

  {

  return a2+b2;

  }

======================================================

为函数指针数组赋值:

为函数指针数组赋值有两种方式:静态定义和动态赋值。

  1.
静态定义

  在定义函数指针数组的时候,已经确定了每个成员所对应的函数。例如:

  void (*INTARRAY[])(void) = {Stop,Run,Jump};

  从根本上讲函数指针数组依然是数组,所以和数组的定义类似,由于是静态赋值,[ ]里面的数字可以

  省略。这个函数指针数组的成员有三个。

  INTARRAY[1](); //执行Run函数

  2.
动态赋值

  也可以先定义一个函数指针数组,在需要的时候为其赋值。为了还原它本来的面目,我们先对这个执行特定类型的函数指针进行类型重定义,然后再用这个新数据类型来定义数组。如下:

  typedef void (*INTFUN)(void); //此类型的函数指针指向的是无参、无返回值的函数。

  INTFUN INTARRAY[32]; //定义一个函数指针数组,其每个成员为INTFUN类型的函数指针

  INTARRAY[10] = INT_TIMER0; //为其赋值

  INTARRAY[10](); //调用函数指针数组的第10个成员指向的函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐