簡體   English   中英

了解如何將cmp(比較器函數)用作另一個函數的參數

[英]understanding how cmp (comparator functions) is used as arguments to another function

一段時間以來,這一直使我感到困惑,不確定是否有人可以理解我要開車去的地方

資料來源: https : //www.oreilly.com/library/view/algorithms-in-a/9780596516246/ch04s06.html

我想弄清楚傳遞cmp作為buildHeap的參數到底做了什么

buildHeap (ar, cmp, n);

這本書似乎將cmp描述為比較器功能( qsort中的比較功能如何工作? ),並且

static void buildHeap (void **ar, int(*cmp)(const void *,const void *), int n) {

我說對了嗎

int(*cmp)(const void *,const void *)

從本質上講,C與C#中的委托等效嗎?

也就是說,將cmp傳遞到buildHeap會告訴buildHeap要實現的功能是比較器功能(適合以下功能的簽名):

int(*cmp)(const void *,const void *)

我可以通過另一種方式教buildHeap在不傳遞cmp的情況下執行比較器功能嗎?

buildHeapcmp參數是一個函數指針 ,它指向具有兩個const void *參數的函數,這些參數返回一個int。 buildHeap可以使用此函數指針來調用有問題的函數以比較兩個項目。

例如,如果要比較兩個整數,則可以實現如下函數:

int compare_int(const void *p1, const void *p2)
{
    const int *a = p1;
    const int *b = p2;

    if (*a > *b) {
        return -1;
    } else if (*a < *b) {
        return 1;
    } else {
        return 0;
    }
}

然后,您將把compare_int作為第二個參數傳遞給buildHeap ,即buildHeap(arr, compare_int, n) 然后在buildHeap某個地方可以適當地調用此函數:

void buildHeap (void **ar, int(*cmp)(const void *,const void *), int n) {    
   ...
   cmp(ar[x], ar[y]);
   ...
}

buildHeap內部調用cmp實際上會調用compare_int

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM