2013-07-01 37 views
0

我在我的演講文件中發現了這個代碼。 這是一個泛型函數,得到一個比較功能和數組和排序void *的指針,以及通用的BUBBLE SORT

typedef Relation (*CmpFunction)(void*, void*); 
void sort(void **array, int n, CmpFunction compare){ 
    int i, j; 
    void* tmp; 
    assert(array !=NULL && compare != NULL); 
    for(i=0; i<n; i++) { 
     for(j=i+1; j<n; j++) { 
     if(compare(arr[i], arr[j])==Left) { 
      tmp = array[i]; 
      array[i] = array[j]; 
      array[j] = tmp; 
      } 
     } 
    } 
} 

關係是冒泡排序是:枚舉類型(不感興趣)。 我的問題是,爲什麼排序()得到

無效**,

爲什麼不是

無效*

。 P.S講座的作者是故意的,但我無法弄清楚。

+0

檢查此鏈接:[有點泛泛的實現](http://en.literateprograms.org/Bubble_sort_%28C%29) –

回答

0

這不是一個通用的排序,它是一個void *數組的排序器。

因此,arrayvoid **,意思是「指向指向void *的指針」。您可以解除引用一次,array[0]是要排序的第一個void *。當然你不能取消雖然,因爲void *不支持。

順便說一下,標準庫的qsort()是一個更好的通用排序示例。

+0

所以,如果我傳遞一個int數組,那麼函數將把數組轉換爲void * *並且每個元素都將被轉換爲void *? –

+0

是的,所以不要這樣做,因爲你不能假設'sizeof(int)== sizeof(void *)'。它旨在對'void'指針的數組進行排序。 – unwind

+0

http://postimg.org/image/sttaubgiz/ ????? –