Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menghantar dan memanggil fungsi menggunakan penunjuk fungsi C++?

Bagaimana untuk menghantar dan memanggil fungsi menggunakan penunjuk fungsi C++?

王林
王林asal
2024-04-17 16:36:01870semak imbas

Penunjuk fungsi membolehkan fungsi diluluskan sebagai parameter, menjadikan panggilan fungsi lebih fleksibel. Anda mengisytiharkan penuding fungsi, lulus parameter dan memanggil fungsi yang ditunjuk melalui pengendali penuding. Fungsi lanjutan seperti penjadualan dinamik dan pemilihan algoritma pengisihan boleh dilaksanakan melalui penunjuk fungsi.

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

Cara menghantar dan memanggil fungsi menggunakan penunjuk fungsi C++

Penuding fungsi ialah jenis penuding khas yang menunjuk ke fungsi. Penunjuk fungsi membolehkan kami menghantar fungsi sebagai parameter kepada fungsi lain, membolehkan panggilan fungsi peringkat lebih tinggi. . yang menunjuk kepada menerima Fungsi yang mengambil dua integer dan mengembalikan integer.

Untuk memulakan penuding fungsi, kita boleh menggunakan nama fungsi atau penuding fungsi:

int (*func_ptr)(int, int);
di mana my_function ialah fungsi dengan tandatangan yang sepadan.

Melalui penunjuk fungsi

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

Anda boleh menghantar penunjuk fungsi sebagai parameter kepada fungsi lain: 🎜rrreee🎜Fungsi call_function di atas menerima penunjuk fungsi func, yang menghala ke Fungsi yang mengambil dua integer dan mengembalikan integer. 🎜🎜🎜Memanggil penuding fungsi🎜🎜🎜Untuk memanggil fungsi yang ditunjuk oleh penuding fungsi, kita perlu menggunakan operator penuding (*): 🎜rrreee🎜🎜Kes praktikal🎜🎜🎜Pertimbangkan susunan berikut menggunakan penunjuk fungsi Contoh tatasusunan: 🎜rrreee🎜Dalam contoh di atas, kami mentakrifkan tiga fungsi perbandingan: 🎜
  • banding: fungsi perbandingan menurun
  • lebih besar daripada: Fungsi perbandingan menaik (menggunakan penuding fungsi)
  • [](int a, int b) { return a }: Perbandingan menaik function ( Menggunakan ungkapan lambda)
🎜Fungsi sort mengambil penuding fungsi sebagai parameter dan mengisih tatasusunan mengikut fungsi perbandingan yang ditentukan. Contoh ini menunjukkan cara menggunakan penunjuk fungsi untuk menukar antara algoritma pengisihan yang berbeza dengan mudah. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menghantar dan memanggil fungsi menggunakan penunjuk fungsi C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn