関数ポインタ(int (*func_p)(char **, int *);)により、文字列を入力する関数、出力する関数を交互に呼び出し、文字列の入出力を行なっています。
実行結果
関数ポインタ(int (*func_p)(char **, int *);)により、文字列を入力する関数、出力する関数を交互に呼び出し、文字列の入出力を行なっています。
実行結果

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番目のデータのアドレス
例:→ それぞれの条件を計算するための比較関数を用意し、ASC(昇順)、DESC(降順) を指定しています。
売り上げ金額毎に昇順に並べる:
sort_list(SORT_ASC,&start,uk_compare);
日付毎に降順に並べる:
sort_list(SORT_DESC,&start,date_compare);
004 東京 20050524 00001 東京商店 25000実行結果
003 横浜 20050321 00002 横浜商店 20000
002 千葉 20050103 00001 東京商店 30000
004 東京 20050603 00003 関東商事 15000
004 東京 20050603 00003 関東商事 18000
004 東京 20050603 00003 関東商事 17000
004 東京 20050603 00003 関東商事 16000
004 東京 20050603 00003 関東商事 11000
004 東京 20050603 00003 関東商事 12000