C言語の関数ポインタを使ってみる

こんばんは。きわさです。

今回はC言語の関数ポインタについてです。
呼び出す関数を動的に決定したいときなどに便利です。
まずは普通の関数呼び出しから。

void main(void) {
    int c;
    c = testFunc(1, 2);
    return;
}
int testFunc(int a, int b) {
    return a + b;
}

main関数の他に testFunc があります。testFunc は、引数aとbを足した結果を返却する関数です。
c = testFunc(1, 2)では、1と2をtestFuncに渡して処理を行った結果がcに代入されます。

関数ポインタを使ってみます。

typedef int (*testFunc_t)(int a, int b);
void main(void) {
    int c;
    testFunc_t func;
    func = &testFunc;
    if(func) {
        c = (func)(1, 2);
    }
    return;
}
int testFunc(int a, int b) {
    return a + b;
}

まずはtypedefです。
testFuncと同じように、引数にint型aとbを受け取りint型を返却する関数のポインタとして testFunc_t型を定義しています。

main関数では、testFunc_t型のfuncにtestFuncのポインタを代入しています。
そして、c = (func)(1, 2)では、funcのポインタが示す関数(testFunc)に引数1と2を渡して実行しています。

funcはポインタ型なので、実行前にif(func)のようにNULLの考慮があったほうが安全です。

スポンサーリンク