>  기사  >  백엔드 개발  >  C++ 함수 포인터를 사용하여 함수를 전달하고 호출하는 방법은 무엇입니까?

C++ 함수 포인터를 사용하여 함수를 전달하고 호출하는 방법은 무엇입니까?

王林
王林원래의
2024-04-17 16:36:01938검색

함수 포인터를 사용하면 함수를 매개변수로 전달할 수 있으므로 함수 호출이 더욱 유연해집니다. 함수 포인터를 선언하고, 매개변수를 전달하고, 포인터 연산자를 통해 가리키는 함수를 호출합니다. 동적 스케줄링 및 정렬 알고리즘 선택과 같은 고급 기능은 함수 포인터를 통해 구현할 수 있습니다.

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

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

함수 포인터를 초기화하려면 함수 이름이나 함수 포인터를 사용할 수 있습니다. 🎜rrreee🎜여기서 my_function은 해당 서명이 있는 함수입니다. 🎜🎜🎜함수 포인터 전달🎜🎜🎜함수 포인터를 다른 함수에 매개변수로 전달할 수 있습니다. 🎜rrreee🎜위 함수 call_function은 다음을 가리키는 함수 포인터 func를 받습니다. 두 개의 정수를 취해 정수를 반환하는 함수입니다. 🎜🎜🎜함수 포인터 호출🎜🎜🎜함수 포인터가 가리키는 함수를 호출하려면 포인터 연산자(*)를 사용해야 합니다. 🎜rrreee🎜🎜실용 사례🎜🎜🎜다음을 고려하세요. 함수 포인터 정렬을 사용하여 다음 배열의 예: 🎜rrreee🎜위의 예에서는 세 가지 비교 함수를 정의합니다. 🎜
  • 비교: 내림차순 비교 함수
  • great_than: 오름차순 비교 함수(함수 포인터 사용)
  • [](int a, int b) { return a < function ( 람다 표현식 사용)
🎜 sort 함수는 함수 포인터를 매개변수로 사용하고 지정된 비교 함수에 따라 배열을 정렬합니다. 이 예에서는 함수 포인터를 사용하여 다양한 정렬 알고리즘 간에 쉽게 전환하는 방법을 보여줍니다. 🎜

위 내용은 C++ 함수 포인터를 사용하여 함수를 전달하고 호출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.