2016-07-18 25 views
-3

我想確切地知道第三個參數應該是什麼,因爲我從來沒有見過類似的東西。我的書的C插入排序的實現

void sortPointers(void **ar, int n, int (*cmp)(const void *, const void *)) 
{ 
    int j; 
    for (j = 1; j < n; j++) 
    { 
     int i = j - 1; 
     int *value = ar[j]; 
     while (i >= 0 && cmp(ar[i], value) > 0) 
     { 
      ar[i+1] = ar[i]; 
      i--; 
     } 
     ar[i+1] = value; 
    } 
} 
+1

這是一個函數指針。現在你應該知道要研究什麼。 –

+1

第三個參數是一個(指向一個)比較函數的指針,它將兩個元素進行排序並對它們進行比較。如果元素是有序的,則給出負數(或者在相等的情況下爲0)。如果元素順序錯誤,請給出肯定的結果,然後交換。也就是說,它的輸出應該與'strcmp'類似。 –

+1

簽出['qsort'文檔](http://en.cppreference.com/w/c/algorithm/qsort)。它具有「cmp」作爲一個參數,可以達到同樣的目的。 –

回答

0

該參數是指向兩個void *指針進行比較的函數的指針。 sortPointers(..)函數的這種實現方式使調用者可以使用任何比較函數,從而增加了靈活性。

http://c.learncodethehardway.org/book/ex18.html

+0

「比較兩個void *指針」 - 錯誤。它用於比較由這些指針指向的任何泛型類型的兩個對象。 –

+0

@ EugeneSh.Resmy是正確的。這些空指針可能指向不同的類型也是正確的。 – 2501