qsort の引数:
void qsort(void * base, size_t nmemb, size_t size, int (* compar)(const void *, const void *) );qsort() の関数内では、データ元となるデータもしくは配列をそれぞれポインタで指し示し、ポインタが指し示すデータの順番を入れ替えていくことになります。
void* base : データ元となるデータを指し示すポインタ用配列
size_t nmemb: 配列の数
size_t size: データの型のサイズ(sizeof で指定)
int (*compar)(const void*, const void*)): ソートで用いる大小比較用関数
例題では、
文字列のデータを指し示すポインタ用配列:char* c_table[3];のそれぞれのアドレスを
数値列のデータを指し示すポインタ用配列: int* i_table[5];
c_table[0] = a; → 配列aの先頭アドレス
i_table[i] = &idata[i]; → idata[]配列のi番目のデータのアドレス
というように指定し、qsort() 関数が指し示されたアドレスの順番を入れ替えていくことになります。
qsort() で指定する大小規定用の関数 compare() は、文字列、数値列用それぞれに準備しています。
compare() の関数は、2つのデータの大小を正負の値を使って表現するような関数を自分で規定するものですが、今回は、単に文字列の長さと、データの大きさで指定しています。
実行結果
0 件のコメント:
コメントを投稿