함수 포인터를 사용하면 함수를 매개변수로 전달할 수 있으므로 함수 호출이 더욱 유연해집니다. 함수 포인터를 선언하고, 매개변수를 전달하고, 포인터 연산자를 통해 가리키는 함수를 호출합니다. 동적 스케줄링 및 정렬 알고리즘 선택과 같은 고급 기능은 함수 포인터를 통해 구현할 수 있습니다.
C++ 함수 포인터를 사용하여 함수를 전달하고 호출하는 방법
함수 포인터는 함수를 가리키는 특별한 유형의 포인터입니다. 함수 포인터를 사용하면 함수를 다른 함수에 매개변수로 전달할 수 있어 더 높은 수준의 함수 호출이 가능해집니다.
함수 포인터 선언 및 초기화
함수 포인터를 선언하려면 함수의 반환 유형과 매개변수 유형을 지정해야 합니다.
int (*func_ptr)(int, int);
위 코드는 함수 포인터 func_ptr
를 선언합니다. receive를 가리키는 두 개의 정수를 취하고 정수를 반환하는 함수입니다. 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 < b; }
:升序比较函数(使用 lambda 表达式)函数 sort
my_function
은 해당 서명이 있는 함수입니다. 🎜🎜🎜함수 포인터 전달🎜🎜🎜함수 포인터를 다른 함수에 매개변수로 전달할 수 있습니다. 🎜rrreee🎜위 함수 call_function
은 다음을 가리키는 함수 포인터 func
를 받습니다. 두 개의 정수를 취해 정수를 반환하는 함수입니다. 🎜🎜🎜함수 포인터 호출🎜🎜🎜함수 포인터가 가리키는 함수를 호출하려면 포인터 연산자(*
)를 사용해야 합니다. 🎜rrreee🎜🎜실용 사례🎜🎜🎜다음을 고려하세요. 함수 포인터 정렬을 사용하여 다음 배열의 예: 🎜rrreee🎜위의 예에서는 세 가지 비교 함수를 정의합니다. 🎜비교
: 내림차순 비교 함수[](int a, int b) { return a < function ( 람다 표현식 사용)
sort
함수는 함수 포인터를 매개변수로 사용하고 지정된 비교 함수에 따라 배열을 정렬합니다. 이 예에서는 함수 포인터를 사용하여 다양한 정렬 알고리즘 간에 쉽게 전환하는 방법을 보여줍니다. 🎜위 내용은 C++ 함수 포인터를 사용하여 함수를 전달하고 호출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!