C++:函数指针

函数的指针:储存着函数的地址的指针
C++中函数名表示的是函数的地址,比如求两数之和的函数int sum(int a,int b),其地址为sum。

int sum(int, int);//函数声明
int sum(int a, int b)
{
	return a + b;
}

函数指针的声明:在声明时应该指定函数的返回类型以及函数的形参列表.比如对应上述的sum函数,其指针声明方式如下:

int (*pf)(int,int) = sum;//与sum函数的声明方式类似,只是将sum替换为了(*pf)

声明函数的指针通常只需要将函数的声明复制过来然后将函数名换为(pf)即可,另外必须将pf使用括号括起,否则将产生一些区别:

int (*pf)(int); //声明一个函数指针,该指针指向的函数输入的参数为两个int,返回值也为一个int
int *pf(int);//声明了一个函数,该函数名为pf,输入为两个int,返回一个int指针。

使用指针函数调用函数的方法有两种,如下:

int res1 = pf(1, 2);
int res2 = (*pf)(2, 3);
cout << res1 << " " << res2 << endl;

将函数指针作为参数传入另外一个函数,现在声明一个函数callFun,其共有三个输入,第一个参数为输入为两个int,返回值为一个int的函数指针,另外的两个输入为int型变量,其功能为将传入的函数进行调用:

int callFun(int (*)(int, int), int, int);
int callFun(int (*pf)(int, int), int a, int b)
{
	return pf(a, b);
}

使用方式如下:

	cout << callFun(pf, 4, 6) << endl; //输出10

更复杂的例子:考虑下面三个函数声明,我们可以看到虽然其形参列表不同,但是事实上是相同的:一个double类型的指针和一个int型变量,并且都返回一个double型指针:

const double* f1(const double ar[], int n);
const double* f2(const double[], int);
const double* f3(const double*, int);

它们的函数指针声明方式如下:

const double* (*pf1)(const double ar[],int) = f1; //声明的同时初始化
const double* (*pf2)(const double[], int) = f2;
const double* (*pf3)(const double*, int) = f3;

可以看出将函数的声明中的函数名使用(*pf)来代替即可,以f1为例,使用指针调用函数的方法如下:

double ar[3] = { 1.1,2.2,3.3 };
const double* res3 = pf1(ar, 1);
cout << res3 << endl;//返回指针中保存的内存地址
cout << *res3 << endl;//返回内存中存储的数据

现在如果想要将三个函数以指针数组的形式保存,则可以使用如下方法:

const double* (*pfs[3])(const double[], int) = { f1,f2,f3 };

对其中任意一个函数通过指针进行调用的方法如下:

cout << pfs[1] << endl;//调用第二个函数,分别输出地址和值
cout << *pfs[1] << endl;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值