タイトルが示すように、C で関数のポインターを使用するにはどうすればよいですか? 関数名のアドレスを取得して別の関数に渡すことはできますか? それを逆参照して呼び出しますか?
どうもありがとう。
タイトルが示すように、C で関数のポインターを使用するにはどうすればよいですか? 関数名のアドレスを取得して別の関数に渡すことはできますか? それを逆参照して呼び出しますか?
どうもありがとう。
関数のアドレスがわかっている場合は、はい。例えば:
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int operation(int (*op)(int, int), int a, int b)
{
return op(a, b);
}
次に、次のように呼び出します。
printf("%d\n", operation(&add, 5, 3)); // 8
printf("%d\n", operation(&sub, 5, 3)); // 2
いくつかの配列トリックを実行することもできます:
int op = 0;
int (*my_pointer[2])(int, int) =
{
add, // op = 0 for add
sub // op = 1 for sub
};
printf("%d\n", my_pointer[op](8, 2)); // 10
あなたの質問に正確に答えるために、Cには「関数ポインタ」と呼ばれるそのようなニーズに対する規定があります。
ただし、特定のルールに従う必要があります。
1) 関数ポインタを使用して呼び出すすべての関数は、同じ戻り値の型を持つ必要があります。2) 関数ポインタを使用して呼び出すすべての関数は、同じ数の引数と引数の型を持っている必要があります。
例えば、
int add(int, int); int サブ (int, int);
上記の 2 つの関数では、関数ポインタを次のように記述できます。
int (*操作)(int , int);
Flavio Torbioの説明どおりに使用できます。
それが役に立てば幸い.....