0

重複の可能性:
関数ポインターの配列を使用する方法は?

C で関数ポインタの動的リストを宣言するにはどうすればよいのでしょうか。関数ポインタへのポインタを使用していますか?

4

3 に答える 3

2

動的に割り当てられたメモリのブロックを指すために使用できる関数ポインタへのポインタ。関数の型が次のようになっているとしましょうvoid (int)

void (*(*))(int) // Bare type
void (*(*f))(int) // Variable

または、配列に関数ポインタが必要な場合もあります。その場合は、次のようになります。

void (*[10])(int) // Bare type
void (*af[10])(int) // Variable

関数のパラメータと戻り値のタイプを変更できます。

関数ポインタの配列は、実行する数値から関数へのマップとして使用できます。これはエミュレーションを行う1つの方法です。たとえば、命令からOPコードを取得した後、ポインターの配列を使用して操作を実行できます。(これはそうするための1つの方法ですが、実際にエミュレーションコードで行われるかどうかはわかりません)。

于 2012-08-02T14:53:35.183 に答える
1

はい、関数ポインタの配列を持つことができます。

これは、たとえば、特定のイベントの一連のコールバック関数を収集する場合に役立つことがあります。

addEventListener例として、任意のDOM要素が複数のclickイベントを持つ可能性があるブラウザーでDOM要素に実装することを検討してください。単純なデータ構造は次のようになります。

void (*clickHandlers[MAX_EVENT_HANDLERS])(EventData arg);

動的リストの場合は、を使用して関数ポインターのバッファーを割り当てます。さらにスペースが必要な場合はmalloc、次のようにします。realloc

void (**clickHandlers)(EventData arg);
于 2012-08-02T14:53:27.257 に答える
1

動的リストの場合、基本的なリンク リストを使用できます。

struct list {
   int (*func)(int, float, double);
   struct list *next;
}

または、必要に応じてサイズ変更される関数ポインターの配列。

于 2012-08-02T14:55:03.113 に答える