0

重複の可能性:
関数ポインターのポイントは何ですか?

私はこのコードを見ました

 void (*foo)(int);

そして、それが関数へのポインタであることを理解しました。

なぜ私は別の関数を指す必要がありますか?それは私に何を与えますか?

4

3 に答える 3

1

に提供されている比較関数のように、プログラム フローに従って変更できるハンドラ関数を格納するために使用できますqsort

void (*my_handler)(int);

void set_handler(void(*fn)(int)) {
    my_handler = fn;
}

void do_stuff() {
    // ...
    my_handler(x); // using a custom handler
}

if (something) {
    set_handler(my_function_1);
}
else set_handler(my_function_2);    

do_stuff(); 
于 2012-10-27T07:30:31.877 に答える
0

ソートアルゴリズムの比較対象として注入できます。したがって、外部のロジックを除外できます。

または、イベント処理のために、このメソッドを使用してコールバックを実装できます。

于 2012-10-27T07:26:12.923 に答える
0

関数ポインターは、一般的にコールバックに使用されます。たとえば、重い処理を行う非同期関数があり、その処理が完了したときに通知を受け取りたいとします。

void doWork(void (*foo)(int));

その関数を呼び出すと、独自のスレッドで実行されるため、すぐに戻ります。完成したことはどうやってわかりますか?完了したら、提供する関数を呼び出すように指示します。

void myFoo(int n);

そして、あなたはそれをに渡しますdoWork():

doWork(myFoo);

doWork()終了すると、 が呼び出されますmyFoo()

これはコールバックの使用法の 1 つにすぎませんが、最も一般的な使用法だと思います。

于 2012-10-27T07:27:30.830 に答える