函数的地址是存储其机器语言代码的内存的开始地址。
1、获取函数的地址
直接使用函数名(不跟参数)即可。
2、声明函数指针
返回类型 (*pf) (参数列表)
函数原型: double pam(int);
指针类型: double (*pf)(int)
3、使用函数指针来调用被指向的函数
pf =pam;
以下两种格式都可以(C++都允许):
double x= pf(5);
doube y= (*pf)(5)
4、使用typedef 进行简化
typededouble (*p_func) (int )
p_funcpf;
将p_func作为函数指针的原型
示例:
#include <iostream>
using namespace std;
const double * f1(const double ar[],int n);
const double * f2(const double [] ,int);
const double * f3(const double *,int );
typedef const double * (*p_func)(const double * ,int );
int main()
{
double av[3] = {111.3,1542.6,2227.9};
//pointer to a function
// const double *(*p1)(const double *,int )=f1;
// const double *(*p2)(const double *,int )=f2;
p_func p1 = f1;
p_func p2 = f2;
cout<<"Using pointers to functions:\n";
cout<<"Address Value\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};
// const double *(**pb)(const double *,int) = pa;
p_func pa[3] = {f1,f2,f3};
p_func * pb = pa;
cout<<"\nUsing an array of pointers to functions:\n";
cout<<"Address Values\n";
for(int i=0;i<3;++i)
cout<<pa[i](av,3)<<": "<<*pa[i](av,3)<<endl;
for(int i=0;i<3;++i)
cout<<pb[i](av,3)<<": "<<*pb[i](av,3)<<endl;
cout<<"Using pointers to an array of pointers:\n";
cout<<"Address Values\n";
p_func (*pc)[3];
pc = &pa;
const double * pdb = (*pc)[1](av,3);
cout<<pdb<<" : "<<*pdb<<endl;
}
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;
}