頭檔案:
#include <stdlib.h>
聲明:
參數:
base: 指向要排序的數組的指針,可以是一維數組,也可以是二位數組
nitems:數組中前多少個元素需要排序
size:每個元素所占位元組數
compar:比較函數
一個字元串數組:*str[max],假設裡面現在儲存了n個字元串了。
首先要正确了解什麼是字元串數組,簡單的說,可以了解成它就是一個數組,隻不過其中的元素是一串字元串,而通路這些字元串,得用指針,也就是它們的位址,比如*name[]={"james","henry"},那麼通路其中的字元串就是name[0],name[1]...這裡就有個容易混淆的地方了,對于字元串數組,那麼每個元素的大小到底是多少呢?對name[0]來說,到底是字元串“james”的長度5,還是char*的大小4呢?答案應該是4,因為字元串數組裡面儲存的是各個字元串的指針,是以回到上面所說的第二點注意,用qsort的時候應該要傳sizeof(char *);
第二,編寫compar函數比較字元串有地方要注意:
不能把strcmp本身傳給qsort,即不能寫strcmp(p,q),因為形參是const void*類型,同理,寫成strcmp((char *)p, (char *)q);也是無效的;正确的寫法應該是:strcmp(*(char **)p, *(char **)q);先強制轉換成char**,在用*減少一層間接尋址操作:
對于上面的應用,最後使用qsort應該是這樣:
如果是一個是一個二位數組,不是字元串數組,得按以下寫法
輸出: