重複の可能性:
関数ポインターの配列を使用する方法は?
C で関数ポインタの動的リストを宣言するにはどうすればよいのでしょうか。関数ポインタへのポインタを使用していますか?
重複の可能性:
関数ポインターの配列を使用する方法は?
C で関数ポインタの動的リストを宣言するにはどうすればよいのでしょうか。関数ポインタへのポインタを使用していますか?
動的に割り当てられたメモリのブロックを指すために使用できる関数ポインタへのポインタ。関数の型が次のようになっているとしましょうvoid (int)
:
void (*(*))(int) // Bare type
void (*(*f))(int) // Variable
または、配列に関数ポインタが必要な場合もあります。その場合は、次のようになります。
void (*[10])(int) // Bare type
void (*af[10])(int) // Variable
関数のパラメータと戻り値のタイプを変更できます。
関数ポインタの配列は、実行する数値から関数へのマップとして使用できます。これはエミュレーションを行う1つの方法です。たとえば、命令からOPコードを取得した後、ポインターの配列を使用して操作を実行できます。(これはそうするための1つの方法ですが、実際にエミュレーションコードで行われるかどうかはわかりません)。
はい、関数ポインタの配列を持つことができます。
これは、たとえば、特定のイベントの一連のコールバック関数を収集する場合に役立つことがあります。
addEventListener
例として、任意のDOM要素が複数のclick
イベントを持つ可能性があるブラウザーでDOM要素に実装することを検討してください。単純なデータ構造は次のようになります。
void (*clickHandlers[MAX_EVENT_HANDLERS])(EventData arg);
動的リストの場合は、を使用して関数ポインターのバッファーを割り当てます。さらにスペースが必要な場合はmalloc
、次のようにします。realloc
void (**clickHandlers)(EventData arg);
動的リストの場合、基本的なリンク リストを使用できます。
struct list {
int (*func)(int, float, double);
struct list *next;
}
または、必要に応じてサイズ変更される関数ポインターの配列。