[解決済み】C言語の関数ポインタはどのように機能するのですか?
2022-03-18 10:20:24
質問
最近、C言語で関数ポインタを使用した経験があります。
そこで、自分自身の質問に答えるという伝統に従って、このテーマを手っ取り早く知りたい人のために、非常に基本的なことを少しまとめてみることにしました。
どのように解決するのですか?
C言語における関数ポインタ
まず、基本的な関数から始めましょう。 を指します。 :
int addInt(int n, int m) {
return n+m;
}
まず最初に、2 を受け取る関数へのポインタを定義します。
int
を返し
int
:
int (*functionPtr)(int,int);
これで、安全に関数を指定できるようになりました。
functionPtr = &addInt;
さて、関数へのポインタができたので、それを使ってみましょう。
int sum = (*functionPtr)(2, 3); // sum == 5
別の関数にポインタを渡すのも基本的には同じです。
int add2to3(int (*functionPtr)(int, int)) {
return (*functionPtr)(2, 3);
}
関数ポインタを戻り値で使うこともできます(頑張れ、面倒になる)。
// this is a function called functionFactory which receives parameter n
// and returns a pointer to another function which receives two ints
// and it returns another int
int (*functionFactory(int n))(int, int) {
printf("Got parameter %d", n);
int (*functionPtr)(int,int) = &addInt;
return functionPtr;
}
しかし、このような場合は
typedef
:
typedef int (*myFuncDef)(int, int);
// note that the typedef name is indeed myFuncDef
myFuncDef functionFactory(int n) {
printf("Got parameter %d", n);
myFuncDef functionPtr = &addInt;
return functionPtr;
}
関連
-
[解決済み】C 言語の添え字で配列の要素値を代入すると、配列でもポインタでもベクトルでもない値になる
-
[解決済み】「ポインタから異なるサイズの整数へのキャスト」エラーが発生するのはなぜですか?
-
[解決済み] struct has no member named
-
[解決済み】サイズ8の無効な読み取り - Valgrind + C
-
[解決済み】c - 警告:関数 'printf'の暗黙の宣言
-
[解決済み] C++とCの融合 - #ifdef __cplusplus はどのように機能するのか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] C言語で配列のサイズを決定するにはどうすればよいですか?
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】strcmpが機能しない
-
[解決済み] (.text+0x20): `main'への未定義の参照と関数への未定義の参照
-
[解決済み】警告:互換性のないポインタ型からの代入
-
[解決済み】ISO C90では、C言語での宣言とコードの混在が禁止されています。
-
[解決済み】C言語で浮動小数点例外(コアダンプ)発生
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】C言語のフォーマット文字列でデータ引数が使用されない [重複]。
-
[解決済み】なぜか。"エラー: 配列型を持つ式への代入"
-
[解決済み】配列型char[]が代入できない [重複]。
-
[解決済み】c - 警告:関数 'printf'の暗黙の宣言