剛剛學習了下回調函數,對於理論有了初步的瞭解,寫了個簡單的demo驗證了下,還沒具體在項目中應用,所以理解可能還不到位,暫時先簡單記錄一下,以後碰到實際項目,理解更深刻了再回頭補充。
下面從幾個方面闡述自己的簡單理解:
一、回調函數是什麼?(回調函數概念)
二、回調函數能幹啥?(應用場景)
三、回調函數如何實現?(代碼實現)
一、回調函數是什麼?(回調函數概念)
三句話描述:(後面代碼小節會根據該三句話的描述來實現回調函數代碼)
-
1、首先,實現基本功能業務函數,定義成某一種固定格式的函數。如:int Add(int x, int y) { … }
-
2、其次,定義一個通用的“my庫”函數,其參數包含某種類型的函數指針。這個my庫函數就叫做回調函數。
-
3、最後,通過調用“my庫”函數(回調函數),並通過他的參數(函數指針)調用自己實現的功能。
備註:其實回調函數的本質就是對函數指針的使用。
二、回調函數能幹啥?(應用場景)
待補充,當前大概瞭解不同模塊之間的功能互相調用啥的。
三、回調函數如何實現?(代碼實現)
最重要的代碼章節!!根據上述步驟來實現,分爲三步:
3.1 實現基本業務功能函數
/* 函數功能實現 */
int Add(int x, int y) {
printf("回調打印Add\r\n");
return ((x) + (y));
}
int Sub(int x, int y) {
printf("回調打印Sub\r\n");
return ((x) - (y));
}
3.2 定義回調函數(參數指向基本業務功能函數)
備註:方法一和方法二是等價的,都可以採用。
方法一、
/* 重命名函數指針類型 */
typedef int (*pFunc)(int a, int b);
/* 定義回調函數 */
int CallBackFunc(int x, int y, pFunc func) {
return func(x, y);
}
方法二、
/* 定義回調函數,通過該函數傳參其他功能函數指針,從而調用對應功能 */
int CallBackFunc(int x, int y, int (*pFunc)(int a, int b)) {
return (*pFunc)(x, y);
}
3.3 使用回調函數
/* 主函數 */
int main(int argc, char argv[]) {
int a = 1;
int b = 2;
CallBackFunc(a, b, &Add);
CallBackFunc(a, b, &Sub);
return 0;
}