函數(shù)指針與回調(diào)函數(shù)用法

函數(shù)指針與回調(diào)函數(shù)用法

ID:41395332

大?。?5.45 KB

頁數(shù):4頁

時間:2019-08-24

函數(shù)指針與回調(diào)函數(shù)用法_第1頁
函數(shù)指針與回調(diào)函數(shù)用法_第2頁
函數(shù)指針與回調(diào)函數(shù)用法_第3頁
函數(shù)指針與回調(diào)函數(shù)用法_第4頁
資源描述:

《函數(shù)指針與回調(diào)函數(shù)用法》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、C/C++之回調(diào)函數(shù)今天討論下C/C++中的冋調(diào)函數(shù)。在理解“冋調(diào)函數(shù)”之前,首先討論下函數(shù)指針的概念。函數(shù)指針(1)概念:指針是一個變量,是用來指向內(nèi)存地址的。一個程序運(yùn)行吋,所冇和運(yùn)行相關(guān)的物件都是需要加載到內(nèi)存中,這就決定了程序運(yùn)行時的任何物件都可以用指針來指向它。函數(shù)是存放在內(nèi)存代碼區(qū)域內(nèi)的,它們同樣有地址,因此同樣可以用指針來存取函數(shù),把這種指向函數(shù)入11地址的指針稱為函數(shù)指針。(2)先來看一個HelloWorld程序:intmain(intargc,char*argv[]){printf(MHelloWorld!H);return0

2、;}然后,采用函數(shù)調(diào)用的形式來實(shí)現(xiàn):毛I(xiàn)voidInvoke(char*s);intmain(intargc.char*argv[]){Invoke("HelloWorld!n);return0;}voidInvoke(char*s){printf(s);}奄l用函數(shù)指針的方式來實(shí)現(xiàn):毛I(xiàn)voidInvoke(char*s);intmain(){void(*fp)(char*s);〃聲明一個函數(shù)指針(fp)fp=Invoke;〃將Invoke函數(shù)的入口地址賦值給fpfp(nHelloWorld!n);//函數(shù)指針fp實(shí)現(xiàn)函數(shù)調(diào)用return

3、0;}voidInvoke(char*s)printf(s);由上知道:函數(shù)指針函數(shù)的聲明之間唯一區(qū)別就是,用指針名(*fp)代替了函數(shù)名Invoke,這樣這聲明了一個函數(shù)指針,然后進(jìn)行賦值fp=Invoke就可以進(jìn)行函數(shù)指針的調(diào)用了。聲明函數(shù)指針時,只要函數(shù)返回値類型、參數(shù)個數(shù)、參數(shù)類型等保持一致,就可以聲明一個函數(shù)指針了。注意,函數(shù)指針必須用括號括起來void(*fp)(char*s)□實(shí)際中,為了方便,通常用宏定義的方式來聲明函數(shù)指針,實(shí)現(xiàn)程序如2毛I(xiàn)typedefvoid(*FP)(char*s);voidInvoke(char*s);in

4、tmain(intargc.char*argv

5、]){FPfp;〃通常是用宏FP來聲明一個函數(shù)指針fpfp=Invoke;fp(”HelloWorld!H);return0;voidInvoke(char*s){printf(s);}為I函數(shù)指針數(shù)組下面用程序?qū)瘮?shù)指針數(shù)組來個人致了解:#include#includeusingnamespacestd;typedefvoid(*FP)(char*s);voidfl(char*s){cout?s;}voidf2(char*s){cout?s;}voidf3(c

6、har*s){cout?s;}intmain(intargc.char*argv[]){void*a[]={fl,f2,f3};〃定義了指針數(shù)組,這里a是一個普通指針a

7、01CHelloWorld!n);//編譯錯誤,指針數(shù)組不能用下標(biāo)的方式來調(diào)用函數(shù)FPf[]={fl,f2,f3};〃定義一個函數(shù)指針的數(shù)組,這里的f是一個函數(shù)指針f[0](”HelloWorld!n);//正確,函數(shù)指針的數(shù)組進(jìn)行下標(biāo)操作可以進(jìn)行函數(shù)的間接調(diào)用return0;}奄I回調(diào)函數(shù)(1)概念:冋調(diào)函數(shù),顧名思義,就是使用者自己定義一個函數(shù),使用者自己實(shí)現(xiàn)這個函數(shù)的

8、程序內(nèi)容,然后把這個函數(shù)作為參數(shù)傳入別人(或系統(tǒng))的函數(shù)屮,由別人(或系統(tǒng))的函數(shù)在運(yùn)行吋來調(diào)用的函數(shù)。函數(shù)是你實(shí)現(xiàn)的,但出別人(或系統(tǒng))的函數(shù)在運(yùn)行時通過參數(shù)傳遞的方式調(diào)用,這就是所謂的回調(diào)函數(shù)。簡單來說,就是由別人的函數(shù)運(yùn)行期間來回調(diào)你實(shí)現(xiàn)的函數(shù)。(2)標(biāo)準(zhǔn)HelloWorld程序:intmain(intargc,char*argv

9、]){printf(nHelloWorld!H);return0;}將它修改成函數(shù)回調(diào)樣式:毛I(xiàn)〃定義回調(diào)函數(shù)voidPrintfText(){printf(nHelloWorld!H);}〃定義實(shí)現(xiàn)回調(diào)函

10、數(shù)的”調(diào)用函數(shù)”voidCallPrintfText(void(*callfuct)()){callfuct();}〃在main函數(shù)中實(shí)現(xiàn)函數(shù)回調(diào)intmain(intargc,char*argv[]){CallPrintfText(PrintfText);return0;}毛I(xiàn)修改成帶參的冋調(diào)樣式:〃定義帶參回調(diào)函數(shù)voidPrintfText(char*s){printf(s);}〃定義實(shí)現(xiàn)帶參回調(diào)函數(shù)的”調(diào)用函數(shù)”voidCallPrintfText(void(*callfuct)(char*),char*s){callfuct(s);}〃在

11、main函數(shù)屮實(shí)現(xiàn)帶參的函數(shù)回調(diào)intmain(intargc5char*argv[]){CallPrintfrextCP

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。