#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]={
1111.3,2222.4,3333.5
};
const double *(*p1)(const double *,int )=f1;
//auto随机定义类型,只可以单值初始化,不能初始化列表
// auto p2=f2 等同于
const double *(*p2)(const double *,int )=f2;
cout<<"using pointers to functions: \n" ;
cout << "address valus \n ";
cout << (*p1)(av ,3) <<":" << *(*p1)(av ,3) <<endl;
cout << p2(av ,3) <<":" << *p2(av ,3) <<endl;
const double *(*pa[3])(const double *,int )={
f1,f2,f3
};
//auto pb=pa;
const double *(**pb)(const double *,int )=pa;
cout <<"\n using an array of pointers to functions:\n";
cout << "address value \n";
for(int i=0;i<3;i++){
cout << pa[i](av,3) <<":"<< *pa[i](av,3)<<endl;
}
cout <<"\n using a pointer to a pointer to functions:\n";
cout << "address value \n";
for(int i=0;i<3;i++){
cout << pb[i](av,3) <<":"<< *pb[i](av,3)<<endl;
}
cout << "\n using pointers to an array of pointers:\n";
cout << "address value \n";
//auto pc=&pa;与下面等价
const double *(*(*pc)[3])(const double *,int )=&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;
}
<img src="https://img-blog.youkuaiyun.com/20140606160310859?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY29vbF9lYXN5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />
函数指针基础知识
//申明一个函数thinkint think(){
return 0;
}
process(think);
//think就是函数think()的地址 ,将函数think()的地址传送到process()
thought(think());
//将think()的返回值传送到thought()
申明函数指针
double pam(int ); //申明一个函数pam
double (*pf)(int); //pf指针返回一个double数值
double *pff (int); //pff()返回一个double类型的指针
pf = pam; //初始化pf指针,让pf实现pam功能
const double * f1(const double ar[] , int n);
const double * f2(const double [] , int n);
const double * f3(const double * , int n);
//参数列表 const double ar[]与const double *ar的含义完全相同
// const double ar[]可以简化为 const double []
//const double *ar 可以简化为 const double *
*pd[3] //三个指针的指针数组
(*pd)[3] //一个指针指向三个元素的数组