#include <stdio.h>#include <stdlib.h>void (*funP)(int); //声明也可写成void(*funP)(int x),但习惯上一般不这样。void (*funA)(int);void myFun(int x); //声明也可写成:void myFun( int );int main(){ //一般的函数调用 myFun(100); //myFun与funP的类型关系类似于int 与int *的关系。 funP=&myFun; //将myFun函数的地址赋给funP变量 (*funP)(200); //通过函数指针变量来调用函数 //myFun与funA的类型关系类似于int 与int 的关系。 funA=myFun; funA(300); //三个貌似错乱的调用 funP(400); (*funA)(600); (*myFun)(1000); return 0;}void myFun(int x){ printf("myFun: %d\n",x);}
输出:
#include <stdio.h>#include <stdlib.h>void (*funP)(int);void (*funA)(int);void myFun(int x);int main(){ funP=&myFun; //深入理解 printf("sizeof(myFun)=%d\n",sizeof(myFun)); printf("sizeof(funP)=%d\n",sizeof(funP)); printf("myFun\t 0x%p=0x%p\n",&myFun,myFun); printf("funP\t 0x%p=0x%p\n",&funP,funP); printf("funA\t 0x%p=0x%p\n",&funA,funA); return 0;}void myFun(int x){ printf("myFun: %d\n",x);}
输出:
#include <stdio.h>#include <stdlib.h>typedef void(*FunType)(int);//前加一个typedef关键字,这样就定义一个名为FunType函数指针类型,而不是一个FunType变量。//形式同 typedef int* PINT;void myFun(int x);void hisFun(int x);void herFun(int x);void callFun(FunType fp,int x);int main(){ callFun(myFun,100);//传入函数指针常量,作为回调函数 callFun(hisFun,200); callFun(herFun,300); return 0;}void callFun(FunType fp,int x){ fp(x);//通过fp的指针执行传递进来的函数,注意fp所指的函数有一个参数}void myFun(int x){ printf("myFun: %d\n",x);}void hisFun(int x){ printf("hisFun: %d\n",x);}void herFun(int x){ printf("herFun: %d\n",x);}
输出:
联系客服