?回調(diào)函數(shù)是一個程序員不能顯式調(diào)用的函數(shù);通過將回調(diào)函數(shù)的地址傳給
調(diào)用者從而實現(xiàn)調(diào)用?;卣{(diào)函數(shù)使用是必要的,在我們想通過一個統(tǒng)一接口實現(xiàn)不
同的內(nèi)容,這時用回掉函數(shù)非常合適。比如,我們?yōu)閹讉€不同的設(shè)備分別寫了不同
的顯示函數(shù):void TVshow(); void ComputerShow(); void NoteBookShow()...等
等。這是我們想用一個統(tǒng)一的顯示函數(shù),我們這時就可以用回掉函數(shù)了。void sho
w(void (*ptr)()); 使用時根據(jù)所傳入的參數(shù)不同而調(diào)用不同的回調(diào)函數(shù)。
??????不同的編程語言可能有不同的語法,下面舉一個c語言中回調(diào)函數(shù)的例子,
其中一個回調(diào)函數(shù)不帶參數(shù),另一個回調(diào)函數(shù)帶參數(shù)。
??????例子1:
//Test.c
#include <stdlib.h>
#include <stdio.h>
int Test1()
{
??int i;
??for (i=0; i<30; i++)
??{
????printf("The %d th charactor is: %c\n", i, (char)('a' + i%26));
??}
??return 0;
}
int Test2(int num)
{
??int i;
??for (i=0; i<num; i++)
??{
???printf("The %d th charactor is: %c\n", i, (char)('a' + i%26));
??}
??return 0;
}
void Caller1(void (*ptr)())//指向函數(shù)的指針作函數(shù)參數(shù)
{
??(*ptr)();
}
void Caller2(int n, int (*ptr)())//指向函數(shù)的指針作函數(shù)參數(shù),這里第一個參數(shù)是為指向函數(shù)的指針服務(wù)的,
{ ??????????????????????????????????????????????//不能寫成void Caller2(int (*ptr)(int n)),這樣的定義語法錯誤。
??(*ptr)(n);
??return;
}
int main()
{
??printf("************************\n");
??Caller1(Test1); //相當(dāng)于調(diào)用Test2();
??printf("&&&&&&************************\n");
??Caller2(30, Test2); //相當(dāng)于調(diào)用Test2(30);
??return 0;
}
??????以上通過將回調(diào)函數(shù)的地址傳給調(diào)用者從而實現(xiàn)調(diào)用,但是需要注意的是帶
參回調(diào)函數(shù)的用法。要實現(xiàn)回調(diào),必須首先定義函數(shù)指針。函數(shù)指針的定義這里稍
微提一下。比如:
????int (*ptr)(); 這里ptr是一個函數(shù)指針,其中(*ptr)的括號不能省略,因為
括號的優(yōu)先級高于星號,那樣就成了一個返回類型為整型的函數(shù)聲明了