この関数は,標準ライブラリー関数で,stdlib.hをインクルードすることにより使 うことができる.プログラムの先頭付近に
#include <stdlib.h>と書けば,インクルードできる.
このqsort()関数を使う場合の引数の渡し方であるが,それは教科書(Table 1-1)に 書いてあるとおりである.正確な記述は教科書の通りであるが,もう少し分かりやすく書 くと
void qsort(配列名, 配列の数, 配列一つのバイト数, 比較関数)となる.返値はなく,配列そのものがソートされる.引数はデータを入れてある配列に関 するものと比較関数である.
ここで,ちょっと難しいのは,比較関数の作り方である.それを,教科書の例(List 1-4) で示すことにする.教科書の比較関数は,
int compare(const void *arg1,const void *arg2) { return(*((int *)arg1)-*((int *)arg2)); }となっている.返値は整数型と宣言されている.qsort()関数の引数で渡す比較関数 の返値は整数と決められているので,それに従っている.問題は引数で,constは引 数が変化しないことを明示的に示している.arg2を左辺値として,代入文を使うと エラーが発生する.つぎのvoidは,arg1やarg2はポインターであるが, その型は後で決めると言うことである.実際このプログラムでは,強制型変換(キャスト) を使って決めている.
つぎにこの関数の計算であるが,次の文が難しい.
*((int *)arg1まずこれは,(int *)arg1でarg1を整数型のポインターに強制的に型変換して いる.そして,もっとも左にあるアスタリスク*で,そのポインターが示す値を取り 出している.
ちょっと難しいが,C言語では,引数として変数のみならず関数も引数で送ることができ
るのである.