1. ホーム
  2. c

[解決済み] C言語で関数をパラメータとして渡すにはどうすればよいですか?

2022-03-04 21:13:51

質問

パラメータで渡された関数をデータセットに対して実行する関数を作りたいのですが、どうすればいいですか?C言語でパラメータとして関数を渡すにはどうすればよいのでしょうか?

どのように解決するのですか?

宣言

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

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

これは、パラメータ f を持つ関数へのポインタになります。 void の戻り値の型であり、1つの int パラメータを使用します。次のような関数( print ) に渡すことができる関数の例である。 func が適切な型であるため、パラメータとして使用することができます。

void print ( int x ) {
  printf("%d\n", x);
}

機能呼び出し

関数パラメータで関数を呼び出す場合、渡される値は関数へのポインタである必要があります。この場合は、関数名(括弧なし)を使用します。

func(print);

を呼び出します。 func で、print関数を渡しています。

関数本体

他のパラメータと同様です。 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);
  }
}

ソース