C で関数をパラメータとして渡すにはどうすればいいですか? 質問する

C で関数をパラメータとして渡すにはどうすればいいですか? 質問する

パラメータで渡された関数をデータセットに対して実行する関数を作成したいと考えています。 C で関数をパラメータとして渡すにはどうすればよいですか?

ベストアンサー1

宣言

関数パラメータを取る関数のプロトタイプは次のようになります。

void func ( void (*f)(int) );

これは、パラメータが戻り値の型を持ち、単一のパラメータを取るf関数へのポインタであることを示します。次の関数 ( ) は、適切な型であるため、パラメータとして渡すことができる関数の例です。voidintprintfunc

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);
  }
}

ソース

おすすめ記事