#include <stdint.h> #include <stdio.h>
typedef void (*FVOID_t)(void) ;
typedef int (*FINT_t)(char *) ;
void f_0(void){printf("void f_0(void)
");} void f_1(void){printf("void f_1(void)
");} void f_2(void){printf("void f_2(void)
");} void f_3(void){printf("void f_3(void)
");}
int F_0(char * str){int n=printf(str);printf("
");return n;} int F_1(char * str){int n=printf(str);printf("
");return n;} int F_2(char * str){int n=printf(str);printf("
");return n;} int F_3(char * str){int n=printf(str);printf("
");return n;}
FVOID_t FVOID_ARRY_RAM[4] ={f_0,f_1,f_2,f_3};
FINT_t FINT_ARRY_RAM[4] ={F_0,F_1,F_2,F_3};
int main(void) { uint16_t temp; FVOID_t fun_void; FINT_t fun_int;
(&f_0)(); f_0(); (*f_0)(); (**f_0)(); (************************************f_0)();
temp= (&F_0)("temp= (&F_0)(char *)"); temp= F_0("temp= F_0(char *)"); temp= (*F_0)("temp= (*F_0)(char *)"); temp= (**F_0)("temp= (**F_0)(char *)"); temp= (**********************************F_0)("temp= (**********************************F_0(char *)");
fun_void=0; fun_void=FVOID_ARRY_RAM[0]; if(fun_void!=0) { // (&fun_void)(); //错误 fun_void(); (*fun_void)(); (**fun_void)(); (************************fun_void)();
// (&FVOID_ARRY_RAM[0])(); 错误 FVOID_ARRY_RAM[0](); (*FVOID_ARRY_RAM[0])(); (**FVOID_ARRY_RAM[0])(); (************************************FVOID_ARRY_RAM[0])(); }
fun_int=0; fun_int=FINT_ARRY_RAM[0]; if(fun_int!=0) { temp=fun_int("temp=fun_int(char *)"); temp=(*fun_int)("temp=(*fun_int)(char *)"); temp=(**fun_int)("temp=(**fun_int)(char *)"); temp=(************************fun_int)("temp=(************************fun_int)");
temp=FINT_ARRY_RAM[0]("temp=FINT_ARRY_RAM[0](char *)"); temp=(*FINT_ARRY_RAM[0])("temp=(*FINT_ARRY_RAM[0])(char *)"); temp=(**FINT_ARRY_RAM[0])("temp=(**FINT_ARRY_RAM[0])(char *)"); temp=(*********************************FINT_ARRY_RAM[0])("temp=(*********************************FINT_ARRY_RAM[0])(char *)"); }
while(1);
} //编译器为MinGW/GCC3.4.5 /* 结论: GCC中函数指针或者函数fun,则fun()等效于(*fun)(),由此进一步得到: fun()=(*fun)()=(**fun)()=(***fun)()=(****fun)()=(*****fun)()=(******fun)()=…………………… 如果fun是函数名,还有fun()=(&fun)() */ |