回調(diào)函數(shù)就是就是通過一個(gè)統(tǒng)一的接口實(shí)現(xiàn)不同的功能,c語言中的回調(diào)函數(shù)就是在代碼中根據(jù)所傳的參數(shù)不同而調(diào)用不同的回調(diào)函數(shù)
回調(diào)函數(shù)是一個(gè)程序員不能顯式調(diào)用的函數(shù);通過將回調(diào)函數(shù)的地址傳給調(diào)用者從而實(shí)現(xiàn)調(diào)用?;卣{(diào)函數(shù)使用是必要的,在我們想通過一個(gè)統(tǒng)一接口實(shí)現(xiàn)不同的內(nèi)容,這時(shí)用回調(diào)函數(shù)非常合適。
【推薦教程:C語言教程】
比如,我們?yōu)閹讉€(gè)不同的設(shè)備分別寫了不同的顯示函數(shù):
立即學(xué)習(xí)“C語言免費(fèi)學(xué)習(xí)筆記(深入)”;
void TVshow(); void ComputerShow(); void NoteBookShow()...等等。
這是我們想用一個(gè)統(tǒng)一的顯示函數(shù),我們這時(shí)就可以用回掉函數(shù)了。
void show(void (*ptr)());
使用時(shí)根據(jù)所傳入的參數(shù)不同而調(diào)用不同的回調(diào)函數(shù)。
不同的編程語言可能有不同的語法,下面舉一個(gè)c語言中回調(diào)函數(shù)的例子,其中一個(gè)回調(diào)函數(shù)不帶參數(shù),另一個(gè)回調(diào)函數(shù)帶參數(shù)。
#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ù),這里第一個(gè)參數(shù)是為指向函數(shù)的指針服務(wù)的, { //不能寫成void Caller2(int (*ptr)(int n)),這樣的定義語法錯(cuò)誤。 (* ptr)(n); } int main() { printf("************************\n"); Caller1(Test1); //相當(dāng)于調(diào)用Test1(); printf("&&&&&&************************\n"); Caller2(30, Test2); //相當(dāng)于調(diào)用Test2(30); return 0; }
效果圖如下
以上通過將回調(diào)函數(shù)的地址傳給調(diào)用者從而實(shí)現(xiàn)調(diào)用,但是需要注意的是帶參回調(diào)函數(shù)的用法。
要實(shí)現(xiàn)回調(diào),必須首先定義函數(shù)指針。函數(shù)指針的定義這里稍微提一下。
比如:
int (*ptr)();
這里ptr是一個(gè)函數(shù)指針,其中(*ptr)的括號(hào)不能省略,
因?yàn)槔ㄌ?hào)的優(yōu)先級(jí)高于星號(hào),那樣就成了一個(gè)返回類型為整型的函數(shù)聲明了。
總結(jié):以上就是本篇文章的全部?jī)?nèi)容了,希望對(duì)大家有所幫助。
以上就是C語言如何實(shí)現(xiàn)回調(diào)函數(shù)的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
C語言怎么學(xué)習(xí)?C語言怎么入門?C語言在哪學(xué)?C語言怎么學(xué)才快?不用擔(dān)心,這里為大家提供了C語言速學(xué)教程(入門到精通),有需要的小伙伴保存下載就能學(xué)習(xí)啦!
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)