/* gcc -g func_pointer.c -o func_pointer */ #include<stdio.h> typedef void (* FUNC_POINTER)(char *); //関数ポインタのtypedef typedef int (* FUNC_POINTER2)(int, int, int, int); //関数ポインタのtypedef void func1(char *s){ printf("%s\n",s); } void func2(char *s){ int i; for(i=0;i<2;i++){ printf("%s\n",s); } } void func_null(char *s){ } void func(char *s,FUNC_POINTER p){ p(s); } int shortcut_func1(int a, int b, int c, int d) { return a * b * c * d; } int shortcut_func2(int a, int b, int c, int d) { return a + b + c + d; } int shortcut_func(int a, int b, int c, int d, FUNC_POINTER2 p2){ p2(a,b,c,d); } int main(){ FUNC_POINTER p; p = func1; func("ありがと",p); p = func2; func("Thanks",p); p = func_null; func("何も出ないよ",p); FUNC_POINTER2 p2; p2 = shortcut_func1; printf("%d\n", shortcut_func(1,2,3,4,p2)); p2 = shortcut_func2; printf("%d\n", shortcut_func(1,2,3,4,p2)); return 0; }