10.ポインタ

10-15. ポインタ関数ポインタ

◇ポインタ関数ポインタ

またわけのわからないタイトルを作ってしまいました。
ポインタ関数のポインタです。
つまり今度はポインタ関数をポイントしようということです。

宣言文は次のようになります。

型 (*識別名)(引数の型);

さっきと同じですね。
実際に int *p_func(void) を *P_func でポイントする時は

int *(*P_func)(void);
~~~~~
と宣言文を書けばOKです。ちなみに波線の部分が型に相当します。

最後に前回のプログラムに関数ポインタを付け加えてみましょう。

#include <stdio.h>

char *string_func(int n);

int main()
{
    int     i;
    char *(*P_func)(int); /* ここを追加 */
    P_func = string_func; /* 代入も同じですね */

    for ( i=1;i< =3;i++){
        printf("String No.%d %s\n",i,(*P_func)(i));
    }
    return 0;
}

char *string_func(int n)
{
    static char *string[] = {
        "",
        "C-Production",
        "Official HomePage",
        "Spring Version"
    };
    return string[n];
}