#include <stdio.h>#include <stdlib.h>void (*funP)(int); //聲明也可寫成void(*funP)(int x),但習(xí)慣上一般不這樣。void (*funA)(int);void myFun(int x); //聲明也可寫成:void myFun( int );int main(){ //一般的函數(shù)調(diào)用 myFun(100); //myFun與funP的類型關(guān)系類似于int 與int *的關(guān)系。 funP=&myFun; //將myFun函數(shù)的地址賦給funP變量 (*funP)(200); //通過函數(shù)指針變量來調(diào)用函數(shù) //myFun與funA的類型關(guān)系類似于int 與int 的關(guān)系。 funA=myFun; funA(300); //三個貌似錯亂的調(diào)用 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關(guān)鍵字,這樣就定義一個名為FunType函數(shù)指針類型,而不是一個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);//傳入函數(shù)指針常量,作為回調(diào)函數(shù) callFun(hisFun,200); callFun(herFun,300); return 0;}void callFun(FunType fp,int x){ fp(x);//通過fp的指針執(zhí)行傳遞進來的函數(shù),注意fp所指的函數(shù)有一個參數(shù)}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);}
輸出: