21xrx.com
2024-12-22 18:13:42 Sunday
登录
文章检索 我的文章 写文章
C++函数指针作为形参的用法
2023-07-13 02:37:29 深夜i     --     --
C++ 函数指针 形参 用法 实践

C++是一门非常强大的编程语言,在其中,函数指针也是非常重要的一个概念。C++函数指针可以让一个函数参数传递到另一个函数中,从而实现函数的回调功能。在这篇文章中,我们将会介绍C++函数指针作为形参的用法。

首先,我们来看一个简单的例子:


#include <iostream>

using namespace std;

void foo(int a, int b, int (*p)(int, int)) {

  int res = p(a, b);

  cout << "Result: " << res << endl;

}

int add(int a, int b) {

  return a + b;

}

int main() {

  foo(1, 2, add);

  return 0;

}

这是一个非常简单的例子,我们定义了一个函数`foo`,它的参数中有一个参数是函数指针`p`,它的返回值是`int`类型。我们同时定义一个函数`add`,它也返回`int`类型,用于计算两个整数之和。

在`main`函数中,我们传递了三个参数,分别是`1`、`2`和`add`。这里的`add`就是函数指针,它作为参数传递到`foo`函数中,然后在`foo`函数中调用这个函数指针`p`,并将两个整数`a`、`b`作为参数传递进去。

上面的代码中最关键的地方是函数指针的定义和使用。可以看到函数指针的定义必须和被指向的函数的原型保持一致,这就意味着函数指针必须声明返回类型和参数类型,并使用括号括起来。在`foo`函数中,我们使用函数指针`p`来调用传递进来的函数,并且传递两个整数变量`a`和`b`作为该函数的参数。

除了上述方法,C++还支持使用`typedef`关键字给一个函数指针类型起一个更加方便的别名,可以使代码更易读。


typedef int (*funcptr)(int, int);

void foo(int a, int b, funcptr p) {

  int res = p(a, b);

  cout << "Result: " << res << endl;

}

这样我们就可以把一个函数指针类型的声明变得更加简洁:


funcptr p = add;

在这个例子中,我们定义了一个函数指针类型`funcptr`,它的返回值和参数类型与`add`函数保持一致。在`foo`函数中,我们将`p`声明为`funcptr`类型,然后和之前一样来调用它。

C++的函数指针在很多地方都非常有用,能够使我们的代码更加灵活和易读。无论是在回调函数的实现中,还是在实现一些算法中,函数指针都可以发挥很大的作用。因此,学会使用C++的函数指针作为形参的用法是非常重要的。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复