• 函数指针


    #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";
    }

  • 相关阅读:
    Java vs Python
    Compiled Language vs Scripting Language
    445. Add Two Numbers II
    213. House Robber II
    198. House Robber
    276. Paint Fence
    77. Combinations
    54. Spiral Matrix
    82. Remove Duplicates from Sorted List II
    80. Remove Duplicates from Sorted Array II
  • 原文地址:https://www.cnblogs.com/Linkliu/p/functionpoiter.html
Copyright © 2020-2023  润新知