関数ポインタ
状態により実行する関数を変えたい!動的に変えたい!などの場合に、実行する箇所で関数ポインタを元に実態の関数を呼ぶようにします。
qsortのブログでもサラッと利用しててスルッと説明を簡略しましたが、目的は同じです。
例:四則演算の関数をポインタを変えて実行します。
#include <stdio.h> int _plus(int a, int b) { return (a+b); } int _minus(int a, int b) { return (a-b); } int _multi(int a, int b) { return (a*b); } int _divi(int a, int b) { return (a/b); } typedef struct _cal{ int no; char name[6]; int (*func)(); } CAL; int main() { int i; CAL cal[] = { {10,"+",&_plus},{20,"-",&_minus},{30,"*",&_multi},{40,"/",&_divi} }; for(i=0; i<4; i++) { printf("(%d)(%d) 10 [%s] 2 = %d\n",i,cal[i].no,cal[i].name,cal[i].func(10,2)); } }
実行結果
$ gcc -g main.c $ ./a.out (0)(10) 10 [+] 2 = 12 (1)(20) 10 [-] 2 = 8 (2)(30) 10 [*] 2 = 20 (3)(40) 10 [/] 2 = 5