如何使用 C++ 函数指针传递和调用函数?

函数指针允许将函数作为参数传递,使函数调用更加灵活。您可以声明函数指针、传递参数,并通过指针运算符调用指向的函数。通过函数指针可以实现动态调度、排序算法选择等高级功能。如何使用 C++ 函数指针传递和调用函数
函数指针是一种特殊类型的指针,

函数指针允许将函数作为参数传递,使函数调用更加灵活。您可以声明函数指针、传递参数,并通过指针运算符调用指向的函数。通过函数指针可以实现动态调度、排序算法选择等高级功能。

如何使用 C++ 函数指针传递和调用函数?

如何使用 C++ 函数指针传递和调用函数

函数指针是一种特殊类型的指针,它指向一个函数。函数指针使我们可以将函数作为参数传递给其他函数,从而实现更高层次的函数调用。

函数指针声明和初始化

要声明函数指针,我们需要指定函数的返回类型和参数类型:

int (*func_ptr)(int, int);

登录后复制

上面代码声明了一个函数指针 func_ptr,它指向一个接收两个整数并返回一个整数的函数。

要初始化函数指针,我们可以使用函数名或函数指针:

func_ptr = my_function;  // 使用函数名
func_ptr = &my_function; // 使用函数指针

登录后复制

其中 my_function 是具有相应签名的函数。

传递函数指针

可以将函数指针作为参数传递给其他函数:

void call_function(int (*func)(int, int)) {
    int result = func(1, 2);
    // ...
}

登录后复制

上面函数 call_function 接收一个函数指针 func,该函数指针指向一个接收两个整数并返回一个整数的函数。

调用函数指针

要调用通过函数指针指向的函数,我们需要使用指针运算符 (*):

int result = (*func_ptr)(1, 2);  // 调用通过 func_ptr 指向的函数

登录后复制

实战案例

考虑以下使用函数指针排序数组的示例:

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int compare(int a, int b) {
    return a > b;
}

bool greater_than(int a, int b) {
    return a > b;
}

int main() {
    vector<int> arr = {1, 4, 2, 8, 5};

    // 使用函数指针 compare 降序排序
    sort(arr.begin(), arr.end(), compare);

    // 使用 lambda 表达式升序排序
    sort(arr.begin(), arr.end(), [](int a, int b) {
        return a < b;
    });

    // 使用 std::greater 升序排序
    sort(arr.begin(), arr.end(), greater<int>());

    for (int i = 0; i < arr.size(); i++) {
        cout << arr[i] << " ";
    }

    return 0;
}

登录后复制

在上面的示例中,我们定义了三个比较函数:

  • compare:降序比较函数
  • greater_than:升序比较函数(使用函数指针)
  • [](int a, int b) { return a :升序比较函数(使用 lambda 表达式)

函数 sort 采用函数指针作为参数,根据指定的比较函数对数组进行排序。该示例演示了如何使用函数指针在不同的排序算法之间轻松切换。

以上就是如何使用 C++ 函数指针传递和调用函数?的详细内容,更多请关注叮当号网其它相关文章!

文章来自互联网,只做分享使用。发布者:张大嘴,转转请注明出处:https://www.dingdanghao.com/article/363747.html

(0)
上一篇 2024-04-17 16:40
下一篇 2024-04-17 17:20

相关推荐

联系我们

在线咨询: QQ交谈

邮件:442814395@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信公众号