您的位置:首页 > 编程语言 > C语言/C++

C++中函数指针的使用

2015-08-25 09:33 337 查看
函数的地址是存储其机器语言代码的内存的开始地址。
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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: