函数指针允许将函数作为参数传递,使函数调用更加灵活。您可以声明函数指针、传递参数,并通过指针运算符调用指向的函数。通过函数指针可以实现动态调度、排序算法选择等高级功能。
如何使用 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++ 函数指针传递和调用函数?的详细内容,更多请关注编程网其它相关文章!