c++ 用指针将函数作为参数传参

今天发现了一种写法,顺便记录一下。废话不多说,先看代码:

#include <iostream>

using namespace std;

int addition(int x, int y){
    return x + y;
}

int subtraction(int x, int y){
    return x - y;
}

int operation(int x, int y, int (*function)(int, int)){
    return (*function)(x, y);
}

int main(){
    int answer = operation(1, 2, addition);
    cout << answer;

}
在这里我们可以将(*function)视为函数的指针,直接将函数名称传进去,但是内部获取的是指针,而不是函数本身,所以不用担心这么做是把函数拷贝一份浪费了内存的空间。

网上有一些用typedof方法的实现,其实也可以,但是这种方法相对更加简洁一些。对了,上面的

int answer = operation(1, 2, addition);

addition也可以加上&,但其实都一样。编译器会自己读取地址。

对了,我上次发的那个在线编译器只支持c++98,如果想要在线测试比较新的c++功能,比如c++11或者c++14,那么可以访问http://cpp.sh/ (国内的网站可能打开会慢一些)上次国内的那个网站连一个输入函数都实现不了,这个是可以输入的,所以功能上要比上次那个好很多,哈哈。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值