auの日記

プログラミング初心者の日記。(auはハンドルネームです)

C言語で関数ポインタの配列

auです。
今回は関数ポインタを配列で呼び出す関数を変えてみたいと思います。

宣言方法

宣言方法は関数ポインタ名の後ろに配列をつけるだけです。

戻り値の型 (*関数ポインタ名[配列数])(引数の型1, 引数の型2...);

これで宣言できます。

実際に使ってみる

今回は、配列の番号によって"足し算、引き算、掛け算、割り算"をするプログラムを書きました。

#include <stdio.h>

int add(int a, int b) { 
    return a + b;
}

int sub(int a, int b) {
    return a - b;
}

int mul(int a, int b) {
    return a * b;
}

int div(int a, int b) {
    return a / b;
}

int main(void) {
    int a = 4;
    int b = 3;
    int (*p[])(int, int) = {add, sub, mul, div};
    for (int i = 0; i < 4; i++) {
        switch (i) {
            case 0:
                printf("%d + %d = %d\n",a, b, (*p[i])(a, b));
                break;
            case 1:
                printf("%d - %d = %d\n",a, b, (*p[i])(a, b));
                break;
            case 2:
                printf("%d * %d = %d\n",a, b, (*p[i])(a, b));
                break;
            case 3:
                printf("%d / %d = %d\n",a, b, (*p[i])(a, b));
                break;
            default:
                printf("計算できません\n");
        }
    }
    return 0;
}

// 実行結果
4 + 3 = 7
4 - 3 = 1
4 * 3 = 12
4 / 3 = 1