Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語の関数ポインタとは?宣言方法と実践的な使用例をわかりやすく解説

関数ポインタとは

関数ポインタ(pointer to function)とは、メモリ上に存在する関数定義の先頭アドレス(ベースアドレス)を格納するためのポインタです。

C言語では、関数名そのものがその関数の先頭アドレスを表します。そのため、関数ポインタの初期化には関数名を使用します。

宣言方法

データ型 (*ポインタ名)();

具体的な宣言と初期化の例は以下の通りです。

int (*p) ();
p = display; // display() は定義済みの関数

例1:関数ポインタを使って関数を呼び出す

まず、関数ポインタ経由で関数を呼び出す基本形となるプログラムを見てみましょう。

#include<stdio.h>
main (){
    int (*p) (); // 関数ポインタの宣言
    clrscr ();
    p = display;
    *(p) (); // 関数ポインタ経由で関数を呼び出す
    getch ();
}
display (){ // ポインタが指す位置にある関数
    printf("Hello");
}

実行結果

Hello

このプログラムでは、「p = display」によって display 関数のアドレスがポインタ p に代入され、「*(p)()」の記述により、p が指し示す先の関数が実際に呼び出されます。

例2:引数を持つ関数へのポインタ

続いて、引数を受け取る関数を関数ポインタに関連付けて利用する別のプログラムを確認しましょう。

#include <stdio.h>
void show(int* p){
    (*p)++; // *p に 1 を加算
}
int main(){
    int* ptr, a = 20;
    ptr = &a;
    show(ptr);
    printf("%d", *ptr); // 21
    return 0;
}

実行結果

21

この例では、変数 a のアドレスをポインタ ptr に格納し、それを show 関数に渡しています。show 関数内で「(*p)++」により参照先の値が 1 加算されるため、最終的に出力される値は 20 から 21 へと更新されます。このように関数ポインタやポインタ渡しを活用すると、関数の外側にある変数の値を直接操作できます。

  1. 【C言語】再帰関数を使って2つの整数の最大公約数(GCD)を求める方法

    問題 C言語において再帰関数を使用し、与えられた2つの整数の最大公約数(GCD:Greatest Common Divisor)を求めます。 解決策 再帰関数を用いて2つの整数の最大公約数を求めるには、「ユークリッドの互除法」が利用できます。これは「2つの数のGCDは、大きい方の数を小さい方の数で割った余りと、小さい方の数とのGCDに等しい」という性質を応用した手法です。この計算を余りが0になるまで再帰的に繰り返すことで、GCDを効率よく求めることができます。 アルゴリズム 再帰関数を使って2つの整数のGCDを求めるためのアルゴリズムは、以下の手順に従います。 ステップ1 − 再帰関数を

  2. C++プログラムから外部アプリケーション(メモ帳など)を起動する方法

    この記事では、C++プログラムを使ってメモ帳(Notepad)などのサードパーティ製アプリケーションを起動する方法を解説します。実装は非常にシンプルで、コマンドプロンプトで使うコマンドをそのままC++から呼び出すだけで実現できます。ポイントとなるのは、標準ライブラリの system() 関数です。この関数の引数にアプリケーション名(コマンド)を文字列として渡すと、OSがそのコマンドを実行し、対応するアプリケーションが起動します。サンプルコード#include <iostream> using namespace std; int main() { cout <<