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