3 回答

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個贊
因?yàn)閏mp在傳入qsort的時候是作為函數(shù)指針傳入的,qsort在調(diào)用cmp(就是“回調(diào)函數(shù)”)的時候會傳入合適的參數(shù)。
*(int*)a是因?yàn)椋篴是個void *類型,要先用(int*)將它轉(zhuǎn)成int*類型,然后再用*取值,變成int類型,才能比較大小。

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個贊
你這個 cmp和qsort中的cmp是一樣的寫法 應(yīng)該說 qsort在排序的時候 會自動為cmp賦值參數(shù) 因?yàn)閝sort中的cmd的參數(shù)原型就是這樣的 這是他內(nèi)部的比較機(jī)制 也就是這么規(guī)定的
對于下面的
int cmp( const void *a, const void *b){ return *( int *)a - *( int *)b; } |
中的*(int*)a 可以看到 由于cmp函數(shù)要返回的int 切參數(shù)a,b都是指針形式的 但是不知道類型
所以比較的時候進(jìn)行強(qiáng)制轉(zhuǎn)換為int型的指針 然后通過括號外的*取得各自的int值大小進(jìn)行各自變量的差值運(yùn)算 得出各自變量的大小 后返回供 qsort內(nèi)部調(diào)用 這些其實(shí)都是在qsort內(nèi)部完成的 你的提問很好 很好的剖析了他的原理 共勉

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個贊
頭文件:stdlib.h
用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
參數(shù): 1 待排序數(shù)組首地址
2 數(shù)組中待排序元素數(shù)量
3 各元素的占用空間大小
4 指向函數(shù)的指針,用于確定排序的順序
#########################################
qsort(a,n,sizeof(a[0]),cmp); // cmp是一個回調(diào)函數(shù),我們必需按照qsort的函數(shù)聲明中約定好的形式定義并且實(shí)現(xiàn)該函數(shù),也就是說qsort需要的是一個函數(shù)指針,而函數(shù)名恰恰就是
########################################
*(int *)a // 因?yàn)閍的類型是 void * ,先進(jìn)行強(qiáng)制類型轉(zhuǎn)換為 int *, 然后取值做差
添加回答
舉報