2007年6月8日 星期五

qsort與struct指標運用

  1. qsort是stdlib.h裡所包含的一個函式,宣告方式請看參考資料一,qsort需要傳入四個參數,值得一提的是第三和第四個參數,第三個參數是資料型態的大小,可以用sizeof()傳進去比較好,不必手算,第四個參數是比較的函式,要求宣告方式為 int compare(const void *,const void *),傳進的參數必須為void型態,且為const,其他程式無法修改,因此必須在傳進compare後另外宣告兩個原本型態之指標 a與b,再將參數強制轉型指定給 a和b 才能使用,可以看下面的範例程式碼與參考資料中的"函數當作函數的參數"會比較容易瞭解
  2. 若宣告一個 struct abc後,想存取其中的元素時,必須用"."運算子,但如果是 struct 的指標的話,則必須使用"->"來存取裡面的元素,請看參考資料中的pointer
範例程式碼
#include <stdlib.h>

int cmplength(const void *pa,const void *pb);
/*宣告cmplength()*/

struct dics{
char word[26];
int order;
int neworder;
}dictionary[10000];
/*定義srtuct dics並宣告dictionary[10000]為 dic 型態*/

int main(){
qsort(dictionary,N,sizeof(struct dics),cmplength);
return 0;
}
/*呼叫qsort*/

int cmplength(const void *pa,const void *pb){
int la,lb,result;
struct dics *a=(struct dics *)pa;
struct dics *b=(struct dics *)pb;

la=strlen(a->word);
lb=strlen(b->word);
if(la < lb ){
return -1;
}
else{
return 1;
}
}

參考資料


The Clibrary Reference Guide :
qsort-
www.acm.uiuc.edu/webmonkeys/book/c_guide/2.13.html#qsort

pointer-
www.acm.uiuc.edu/webmonkeys/book/c_guide/1.4.html

函數當作函數的參數:
libai.math.ncu.edu.tw/bcc16/C/C/d0.shtml

1 則留言: