2014-10-29 100 views
0

我有一位教授的任務,我不完全理解。這是我們指定的功能標題:將函數* cmp(const * void,const * void)作爲參數傳遞給C並使用它創建一個隊列?

PQueue createQueue(int (*cmp)(const void*a, const void*b)) { 

我找不到cmp的文檔來理解函數本身的功能;它有什麼作用?

除此之外,當我編寫創建隊列的代碼時,如何在createQueue中引用它?

+0

您可以通過其名*,即'cmp'指函數參數。 – 2014-10-29 23:39:49

+0

例如,比如通過比較它被添加到隊列的時間的優先級。 – BLUEPIXY 2014-10-29 23:47:17

+0

但是,當函數在隊列創建函數中被引用時,這個函數實際上做了什麼? – 2014-10-29 23:50:07

回答

2

cmp是參數createQueue,它是由調用者傳入的函數指針。通常cmp它將返回:

  • 一個負整數如果*a小於*b
  • 0如果*a等於*b
  • 的正整數,如果*a大於*b

這是標準庫qsort使用的約定,它在給定比較函數時對數組進行排序。

舉一個具體的例子,我們可以得到的行爲

int a = 1, b = 2, c = 2; 
cmp(&a, &b); // returns < 0 
cmp(&b, &c); // returns 0 
cmp(&b, &a); // returns > 0 

如果我們定義爲CMP

int cmp(const void * a, const void * b) { 
    const int * a_int_ptr = (const int *)a; 
    const int * b_int_ptr = (const int *)b; 

    int a_value = *a; 
    int b_value = *b; 

    return a_value - b_value; 
} 
相關問題