实列代码:
#include <iostream>
const double *f1(const double ar[],int n);
const double *f2(const double [],int);
const double *f3(const double *,int);
int main(){
using namespace std;
double av[3]={11.3,15.6,27.9};
const double *(*p1)(const double *,int)=f1; //定义指向f1等三个函数的指针P1;
auto p2=f2;
cout<<"用指针访问:\n";
cout<<"Address:\n";
cout<<(*p1)(av,3)<<":"<<*(*p1)(av,3)<<endl; //前面的是f1函数返回元素地址;后面的是f1函数返回值
cout<<p2(av,3)<<":"<<*p2(av,3)<<endl; //前面的是f2函数返回元素地址;后面的是f2函数返回值
const double *(*pa[3])(const double *, int)={f1,f2,f3}; //指向三个函数的 函数指针数组;
auto pb=pa; //声明同样类型的数组;
cout<<"\n函数指针访问\n";
cout<<"Address:\n";
for(int i=0;i<3;i++)
cout<<pa[i](av,3)<<":"<<*pa[i](av,3)<<endl;
cout<<"\n指针:\n";
cout<<"Address:\n";
for(int i=0;i<3;i++)
cout<<pb[i](av,3)<<":"<<*pb[i](av,3)<<endl;
cout<<"\n数组:\n";
cout<<"Address:\n";
auto pc=&pa;
cout<<(*pc)[0](av,3)<<":"<<*(*pc)[0](av,3)<<endl;
const double *(*(*pd)[3])(const double *,int)=&pa;
const double *pdb=(*pd)[1](av,3);
cout<<pdb<<":"<<*pdb<<endl;
cout<<(*(*pd)[2])(av,3)<<":"<<*(*(*pd)[2])(av,3)<<endl;
return 0;
}
const double *f1(const double * ar,int n){
return ar;
}
const double *f2(const double ar[],int n){
return ar+1;
}
const double *f3(const double ar[],int n){
return ar+2;
}
运行结构: