
9.5
関数へのポインタ
151
//
この場合、
char
へのポインタへのポインタ(
char**
)
static int str_compare(const void* p1, const void* p2)
{
return strcmp(*(char**) p1, *(char**) p2);
}
例9-4 でプログラムがソートできる最大行数は、定数
NLINES_MAX
で限られる。しかし、
テキスト行へのポインタ配列を動的に作ることによって、この制限を外すこともできる。
9.5
関数へのポインタ
Cでは関数ポインタをさまざまな用途に使う。例えば、関数呼び出しで、処理するデー
タだけでなくデータの処理方式を決めるサブルーチンへのポインタも渡したいことがある。
この使用例は、ソートする配列の情報だけでなく比較関数へのポインタをとる例9-4の標準
関数
qsort()
で取り上げた。
qsort()
は2つの配列要素を比較するときに、指定された関数
を呼び出すためにポインタを使う。
配列に関数ポインタを格納し、配列添字表記を用いて関数を呼び出すこともできる。例
えば、キーボードドライバで添字がキーの数に対応する関数ポインタ表を使うことがある。
ユーザがキーを押すとプログラムは対応する関数へジャンプする。
配列型へのポインタの宣言同様、関数ポインタ宣言には括弧が必要となる。次の宣言は
型
double
の2つの引数をとり型
double
の値を返す関数型へのポインタを定義する。
double (*funcPtr)(double, double); ...