回調函數的本質:提早作了一個協定(把函數的參數、返回值提早定義好)框架
1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 5 6 //任務實現者 7 int myadd(int a, int b) 8 { 9 printf("func add() do...\n"); 10 return a + b; 11 } 12 13 int myadd2(int a, int b) 14 { 15 printf("func add2() do...\n"); 16 return a + b; 17 } 18 int myadd3(int a, int b) 19 { 20 printf("func add3() do...\n"); 21 return a + b; 22 } 23 int myadd4(int a, int b) 24 { 25 printf("func add4() do...\n"); 26 return a + b; 27 } 28 29 typedef int (*MyTypeFuncAdd)(int a, int b); //定義類型 30 31 //任務調用者 32 int MainOp(MyTypeFuncAdd myFuncAdd) 33 { 34 int c =myFuncAdd(5, 6); 35 return c; 36 } 37 38 39 int MainOp2(int(*MyPointerFuncAdd)(int a, int b)) 40 { 41 int c = MyPointerFuncAdd(5, 6); 42 return c; 43 } 44 45 void main() 46 { 47 MyTypeFuncAdd myFuncAdd = myadd; 48 myFuncAdd(3, 4); //間接調用 49 50 myadd(1, 2); //直接調用 51 MainOp2(myFuncAdd); //myFuncAdd 52 MainOp(myFuncAdd); 53 54 //在mainop框架,不發生變化的狀況下,調用後來者的程序 55 MainOp(myadd2); //傳入的是函數的入口地址 56 MainOp(myadd3); 57 MainOp(myadd4); 58 59 60 printf("Hello...\n"); 61 system("pause"); 62 return ; 63 }