関数 (B) に関数 (A) をパラメーターとして与えるにはどうすればよいですか?
関数Bで関数Aを使用できるようにします。
次の例の変数 B のように:
foo(int B) { ... }
関数 (B) に関数 (A) をパラメーターとして与えるにはどうすればよいですか?
関数Bで関数Aを使用できるようにします。
次の例の変数 B のように:
foo(int B) { ... }
関数ポインタを使用する。qsort()
たとえば、標準ライブラリ関数を見てください。
例:
#include <stdlib.h>
int op_add(int a, int b)
{
return a + b;
}
int operate(int a, int b, int (*op)(int, int))
{
return op(a, b);
}
int main(void)
{
printf("12 + 4 is %d\n", operate(12, 4, op_add));
return EXIT_SUCCESS;
}
印刷します12 + 4 is 16
。
操作は、関数内から呼び出される関数へのポインターとして指定されoperate()
ます。
呼び出したい関数があるとしましょう:
void foo() { ... }
そして、あなたはそれを呼び出したいbar
:
void bar(void (*fun)())
{
/* Call the function */
fun();
}
次にbar
、次のように呼び出すことができます。
bar(foo);
別の関数のパラメーター リストに関数ポインター型を書き込むと、特にポインターが複雑な場合に少し奇妙に見えるため、typedef をお勧めします。
例
#include <stdio.h>
typedef int func(int a, int b);
int add(int a, int b) { return a + b; }
int operate(int a, int b, func op)
{
return op(a, b);
}
int main()
{
printf("%d\n", operate(3, 4, add));
return 0;
}