函数指针

#include<iostream>

double betsy(int);
double pam(int);
void estimate(int,double(*pf)(int));

const double * f1(const double ar[],int i)
{
        const double * p =&ar[i];
        return p;
}
const double * f2(const double a[],int i)
{
       const double *q = &a[i];
       return q;
}
const double * f3(const double *m ,int i)
{
       const double *g = &m[i];
      return g;
}

int main(void)
{
       using namespace std;
       const double * (*pa[3])(const double *,int ) = {f1,f2,f3};//定义一个大小为3的函数指针数组pa,并初始化
       const double * (*pb[3])(const double *,int ) = {f2,f1,f3};//定义一个大小为3的函数指针数组pb,并初始化
       const double * (*pc[3])(const double *,int ) = {f3,f2,f1};//定义一个大小为3的函数指针数组pc,并初始化
       const double av[3]={1,2,3};//长双精度类型的数组

       const double * (*(*pf[3])[3])(const double *,int ) ;//定义一个大小为3的,指向大小为3的指针数组的指针pf
      //为指针数组指针赋值
      pf[0]=&pa;
      pf[1]=&pb;
      pf[2]=&pc;

      for(int firdex = 0;firdex < 3;firdex++)
      {
       //第一重循环,选定第firdex个指针数组指针
       //pf[firdex]表示第firdex个指针数组指针的话
       //那么*pf[firdex]就表示指针数组,(*pf[firdex])[secdex]就表示数组中的第几个元素
       //即函数指针,则(*(*pf[firdex])[secdex])表示目标函数
       //则(*(*pf[firdex])[secdex])(av,thidex)表示函数调用
       for(int secdex = 0;secdex < 3;secdex++)
      {
           //第二重循环
           //选定选定指针数组中的第secdex个元素,即函数指针
          for(int thidex = 0;thidex < 3;thidex++)
         {
               //第三重循环
               //函数调用
                const double * xm=(*(*pf[firdex])[secdex])(av,thidex);
                cout<<*xm<<" ";
         }
         cout<<endl;
     }
    }

 


     return 0;
}


double betsy(int lns)
{
      return 0.05*lns;
}

double pam(int lns)
{
      return 0.03*lns+0.0004*lns*lns;
}


void estimate(int lines,double (*pf)(int ))
{
        using namespace std;
        cout<<lines<<" lines will take ";
        cout<<(*pf)(lines)<<" hours\n";
}

posted on 2012-11-29 20:40  一根芦苇  阅读(179)  评论(0编辑  收藏  举报

导航