C言語の関数ポインタとは?宣言方法と基本的な使い方を解説
関数ポインタ(Function Pointer)とは、通常のポインタが変数のアドレスを指すように、コード(関数)のアドレスを指すポインタのことです。C言語では、関数名を記述するだけでその関数の先頭アドレスを取得できるため、これをポインタ変数に代入することで、関数を間接的に呼び出せるようになります。
関数ポインタを使うと、次のような柔軟なプログラミングが可能になります。
- 関数を引数として別の関数に渡すことができる(コールバック関数)
- 関数の戻り値として関数を返すことができる
- 条件に応じて呼び出す関数を動的に切り替えられる
関数ポインタの宣言方法
関数ポインタは、以下の構文で宣言します。
戻り値の型 (*ポインタ名)(引数リスト)
ポイントは、*ポインタ名 を括弧 () で囲むことです。括弧を忘れると「関数の戻り値がポインタである」という宣言と解釈されてしまうため、注意が必要です。
サンプルコード
ここでは、引き算を行う関数を関数ポインタ経由で呼び出す例を紹介します。
#include<stdio.h>
int subtraction(int a, int b) {
return a - b;
}
int main() {
// 関数ポインタfpにsubtraction関数のアドレスを代入
int (*fp)(int, int) = subtraction;
// 関数ポインタを使って関数を呼び出す
int result = fp(5, 4);
printf("関数ポインタで呼び出した結果: %d\n", result);
return 0;
}
実行結果
関数ポインタで呼び出した結果: 1
この例では、int (*fp)(int, int) = subtraction; の部分で、2つのint型引数を受け取りint型を返す関数へのポインタ fp を宣言し、subtraction 関数のアドレスを代入しています。その後、fp(5, 4) と書くことで、通常の関数呼び出しと同じ形式で関数を実行でき、結果として 1 が出力されます。
まとめ
関数ポインタは、コールバック処理やイベントドリブンな設計、qsortなどの標準ライブラリ関数に比較関数を渡す場面など、実践的なCプログラミングで頻繁に活用される重要な概念です。「関数もメモリ上のコードであり、アドレスを持つ」という点を意識すると理解しやすくなります。
-
C言語におけるユニオンとポインタの使い方を徹底解説
ユニオン(共用体)とは、異なるデータ型を持つ複数の変数が、同一のメモリ領域を共有するための仕組みです。構造体が各メンバーごとに独立したメモリを割り当てるのに対し、ユニオンではすべてのメンバーが同じアドレスを参照するという点が大きな特徴です。 ユニオンの構文 ユニオンを定義するときの基本的な書式は次の通りです。 union タグ名{ データ型 メンバー1; データ型 メンバー2; ---- ---- データ型 メンバーn; }; 実際の記述例を見てみましょう。 union sample{ int a; float b; char
-
C言語のbar()関数とは?グラフィックスで塗りつぶし矩形を描く方法
bar() 関数は、C言語のグラフィックス描画に使用される関数の一つです。図形を描くための各種関数がまとめられた graphics.h ヘッダーファイルの中に定義されており、このヘッダーをインクルードすることで利用できます。bar()関数の構文void bar(int left, int top, int right, int bottom);bar() 関数は、棒グラフの「バー」のような2次元の図形、すなわち塗りつぶされた長方形を描画するために使われます。引数は4つあり、それぞれ以下の座標を指定します。left / top: 長方形の左上隅の (X, Y) 座標right / bottom: