2

タイトルが示すように、C で関数のポインターを使用するにはどうすればよいですか? 関数名のアドレスを取得して別の関数に渡すことはできますか? それを逆参照して呼び出しますか?

どうもありがとう。

4

2 に答える 2

8

関数のアドレスがわかっている場合は、はい。例えば:

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
于 2012-12-19T04:42:12.553 に答える
1

あなたの質問に正確に答えるために、Cには「関数ポインタ」と呼ばれるそのようなニーズに対する規定があります。

ただし、特定のルールに従う必要があります。

1) 関数ポインタを使用して呼び出すすべての関数は、同じ戻り値の型を持つ必要があります。2) 関数ポインタを使用して呼び出すすべての関数は、同じ数の引数と引数の型を持っている必要があります。

例えば、

int add(int, int); int サブ (int, int);

上記の 2 つの関数では、関数ポインタを次のように記述できます。

int (*操作)(int , int);

Flavio Torbioの説明どおりに使用できます。

それが役に立てば幸い.....

于 2012-12-19T05:10:52.693 に答える