C++函数指针用法

在当我们定义一个函数时,我们一定都想过一个问题,函数是否也和变量那样,有地址,可以作为函数的一个参数来调用呢?答案是肯定的。那么如果能够将a函数作为一个参数传入b函数,那么这个b函数的弹性会得到大大提升,这也是函数指针的一种重要用法。

函数指针的定义:普通定义:typename(*+函数名)(函数参数)

用vector定义:vector<typename(*+函数名)(函数参数)>+vector名

具体使用方法见代码:

#include<iostream>
int add(int a, int b)
{
	return a + b;
}
int main()
{
	int(*p)(int, int)=add;
	//p = add;
	int a = 1, b = 2,c;
	c = p(a, b);
	std::cout << c;//3
	
}

再举个栗子,给定了我们一个程序,让我们想要在两个整形数字相加之前,先判断这俩数字大小,可是没有明确如果a>b的话就不执行该函数,或者是a<b的话就不执行,在这种模糊的问题说明下,如果我们贸然在函数里面写>或<,这会出麻烦的,因此此时函数作为参数是非常合适的。

#include<iostream>
int add(int a, int b, bool (*p)(int, int))
{
	if (p(a, b))
		return a + b;
	else
	{
		std::cout << "error";
		return -1;
	}
}
bool Isbig(int a, int b)
{
	return a > b ? true : false;
}
bool Issmall(int a, int b)
{
	return a <b ? true : false;
}
int main()
{
	int x, y;
	std::cin >> x >> y;
	int c=add(x, y, Isbig);
	//intc=add(x,y,Issmall);如果想判断小就可以通过控制改变这一个参数即可
	std::cout << c;
}

结果演示:

1 3
error-1

3 1
4

注:函数指针里我们可以直接通过函数名(也就是地址)来直接调用这个函数,没必要进行寻址操作;作为参数的函数有几个参数,要表明,int add(int a, int b, bool (*p)(int, int))。并且函数如果要用普通指针,如:bool*p=Issmall是错误的,一定要用函数指针形式定义的指针才可以。

当然这种方法也不是最优解,可以通过function函数对象库里面所定义的重载函数来更好的解决这个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值