宇宙ドーナツ研究会

セキュリティ系お勉強メモ

関数ポインタについて

宣言方法

カッコで括るのは、int * 型変数を返す関数と区別するため。

int (*pfunc)(int a,int b);    // 関数ポインタ
int *pfunc(int a, int b);     // int * 型変数を返す関数

#include <stdio.h>

void add(int i, int j){
    printf("add:%d\n", i + j);
}

void sub(int i, int j){
    printf("sub:%d\n", i - j);
}

int main(){
    void (*funcs[2])(int, int) = {sub, add};
    funcs[0](10, 3);  // 13
    funcs[1](10, 3);  // 7
}

関数ポインタの型は、typdefしておくと楽。

typedef void (*MYFUNC)(int, int);

int main(){
    MYFUNC func[2] = {sub, add};
    func[0](10, 3);
    func[1](10, 3);
}