2015-05-05 87 views
0

我在編譯使用'qsort'的程序時出現問題 當我嘗試編譯程序時,我必須對指向結構(稱爲元素) 的指針的動態數組進行排序我得到以下錯誤: 「錯誤:傳遞參數從兼容的指針類型‘快速排序’的4 ...」在C中使用qsort

我比較函數(快速排序)是:

int compareElements(const void **e1, const void **e2) 
{ 
    Elemenet* element1 = *(Element** const)e1; 
    Elemenet* element2 = *(Element** const)e2; 
    if (element1->key < element2->key) 
     return -1; 
    ................... 
} 

誰能說什麼是錯的,請..? 我試着改變的這麼多的模式,比較功能,仍然沒有

謝謝

+7

嘗試'INT compareElements(常量無效* E1,常量無效* E2)' – BLUEPIXY

+0

同...另外*(Element * * const)變成(Element *)... :) –

+0

如果element-> key是一個整數,一個float,一個double或者一個字符,我想你可以使用下面的代碼:return element1-> key- element2-> key;)如果key是char *,則必須使用代碼:return strcmp(element1-> key,element2-> key)。 –

回答

1

這是爲qsort函數的原型官。

void qsort(void *base, 
      size_t nmemb, 
      size_t size, 
      int (*compar)(const void *, const void *)); 

所以比較函數原型必須是:

int compare(const void*, const void*); 

什麼這兩個常量無效*參數實際上是指向 取決於正在整理東西。

對於2維陣列,其中第一個索引是指針

然後,常量無效*將這些指針的陣列。

所以比較函數必須將參數轉換爲實際指向的內容。然後在任何字段上進行比較。

返回代碼+ 1,0,-1具有完全相同的含義,從STRCMP()的返回碼