C++中函数指针的使用

函数的地址是存储其机器语言代码的内存的开始地址。

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值