関数へのポインタ

CBeginner
オンラインで実践に進む

はじめに

関数へのポインタは、変数が値のメモリアドレスを格納するのと同じように、関数のメモリアドレスを格納する方法です。関数ポインタを通じて関数が呼び出されるとき、それは関数へのポインタと呼ばれます。

この実験では、関数ポインタを使う方法を示すための C プログラムを書きます。

ポイントする関数を宣言および定義する

このステップでは、2 つの整数引数をとり、何も返さない関数を宣言および定義します。

#include<stdio.h>

void func(int a, int b)
{
    printf("\n\n a = %d \n", a);
    printf("\n\n b = %d \n", b);
}

関数へのポインタを宣言する

このステップでは、ステップ 1 で作成した関数へのポインタを宣言します。関数へのポインタを宣言する構文は、変数へのポインタを宣言する構文と似ていますが、ポイントする関数のパラメータ型と戻り値型を指定します。

// function pointer
void (*fptr)(int, int);

関数のアドレスをポインタに格納する

このステップでは、ステップ 1 で作成した関数のアドレスを、ステップ 2 で作成したポインタに格納します。

// assign address to function pointer
fptr = func;

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

このステップでは、ステップ 2 で作成した関数ポインタを使って、ステップ 1 で作成した関数を呼び出します。

// function calling
func(2,3);
fptr(2,3);  // calling a function referring to pointer to a function

完全なコードを書く

~/project/ ディレクトリ内の main.c ファイルを開きます。

#include<stdio.h>

void func(int a, int b)
{
    printf("\n\n a = %d \n", a);
    printf("\n\n b = %d \n", b);
}

int main()
{
    printf("\n\n\t\tLabEx - Best place to learn\n\n\n");

    // function pointer
    void (*fptr)(int, int);

    // assign address to function pointer
    fptr = func;

    // function calling
    func(2,3);
    fptr(2,3);  // calling a function referring to pointer to a function

    printf("\n\n\t\t\tCoding is Fun!\n\n\n");
    return 0;
}

コードをコンパイルして実行する

コードをコンパイルするには、ターミナルを開き、次のコマンドを入力します。

gcc main.c -o main

プログラムを実行するには、次のコマンドを入力します。

./main

まとめ

この実験では、C プログラムで関数ポインタを使用する方法を学びました。関数ポインタが指す関数を宣言および定義する方法、関数ポインタを宣言する方法、関数のアドレスをポインタに格納する方法、およびポインタを使用して関数を呼び出す方法を見ました。関数ポインタの使用により、複雑なプログラムを書きやすく理解しやすくすることができます。