パラメータで渡された関数をデータセットに対して実行する関数を作成したいと考えています。 C で関数をパラメータとして渡すにはどうすればよいですか?
ベストアンサー1
宣言
関数パラメータを取る関数のプロトタイプは次のようになります。
void func ( void (*f)(int) );
これは、パラメータが戻り値の型を持ち、単一のパラメータを取るf
関数へのポインタであることを示します。次の関数 ( ) は、適切な型であるため、パラメータとして渡すことができる関数の例です。void
int
print
func
void print ( int x ) {
printf("%d\n", x);
}
関数呼び出し
関数パラメータを使用して関数を呼び出す場合、渡される値は関数へのポインタである必要があります。これには関数名(括弧なし)を使用します。
func(print);
を呼び出しfunc
、それに印刷関数を渡します。
関数本体
他のパラメータと同様に、func
関数本体でパラメータ名を使用してパラメータの値にアクセスできるようになりました。func
渡された関数を 0 ~ 4 の数字に適用するとします。まず、print を直接呼び出すループがどのようになるか考えてみましょう。
for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
print(ctr);
}
func
のパラメータ宣言では、 はf
目的の関数へのポインターの名前であるとされているため、f
がポインターである場合は*f
が指すものf
(この場合は関数print
) であることをまず思い出します。結果として、上記のループ内の print のすべての出現を に置き換えるだけです*f
。
void func ( void (*f)(int) ) {
for ( int ctr = 0 ; ctr < 5 ; ctr++ ) {
(*f)(ctr);
}
}