関数ポインタ

関数ポインタは、関数アドレスを代入したポインタのことです。関数ポインタでは、戻り値と引数を指定することができます。

// 関数ポインタ
戻り値の型 (*変数名) (型名1, 型名2, ...);

関数のアドレスの取得

関数をかっこを省略して使うことで、関数のアドレスを取得できます。

// 関数のアドレスの取得
関数名

関数ポインタから関数を呼び出す

関数ポインタから関数を呼び出すことができます。通常の関数と呼び出し方法は同じです。

関数ポインタ(引数1, 引数2, ...);

関数ポインタから関数を呼び出すことができます。

関数ポインタを使ったサンプル

関数ポインタを使ったサンプルです。関数ポインタを使って、関数を呼び出しています。

#include <stdint.h>
#include <stdio.h>

int32_t sum (int32_t num1, int32_t num2);

int main(void) {
  
  // 関数ポインタ
  int32_t (*sum_ptr) (int32_t, int32_t) = sum;
  
  int32_t total = sum_ptr(2, 3);
  
  printf("%d\n", total);
}

int32_t sum (int32_t num1, int32_t num2) {
  int32_t total = num1 + num2;
  
  return total;
}

出力結果です。

5

関数のアドレスとは何ですか?

アドレスを持つのは、データだけではありません。関数もメモリ上に、展開されてアドレスを持っています。関数のアドレスとは、メモリ上に存在する関数の位置を示した先頭のアドレスのことです。

関数ポインタは何の役に立ちますか?

関数ポインタには、関数のアドレスが代入されているので、アドレスの値を、他の関数の引数に渡すことができます。

実行時に共有ライブラリファイルから、関数を読み込むときは、関数のアドレスを取得するので、関数ポインタに代入する必要があります。

共有ライブラリからの関数を取得して、実行する場合に、関数ポインタは必須の知識です。

関連情報