回呼函數就是透過一個統一的介面來實現不同的功能,C語言中的回呼函數就是在程式碼中根據所傳的參數不同而呼叫不同的回呼函數
回呼函數就是一個程序員不能明確呼叫的函數;透過將回呼函數的位址傳給呼叫者從而實現呼叫。回呼函數使用是必要的,在我們想要透過一個統一介面實現不同的內容,這時用回呼函數非常合適。
【推薦教學:C語言教學】
#例如,我們為幾個不同的裝置分別寫了不同的顯示函數:
void TVshow(); void ComputerShow(); void NoteBookShow()...等等。
這是我們想要用一個統一的顯示函數,我們這時就可以用回掉函數了。
void show(void (*ptr)());
使用時會根據所傳入的參數不同而呼叫不同的回呼函數。
不同的程式語言可能有不同的語法,以下舉一個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)() )//指向函数的指针作函数参数 { (* ptr)(); } void Caller2(int n, int (*ptr)())//指向函数的指针作函数参数,这里第一个参数是为指向函数的指针服务的, { //不能写成void Caller2(int (*ptr)(int n)),这样的定义语法错误。 (* ptr)(n); } int main() { printf("************************\n"); Caller1(Test1); //相当于调用Test1(); printf("&&&&&&************************\n"); Caller2(30, Test2); //相当于调用Test2(30); return 0; }
效果圖如下
以上透過將回呼函數的位址傳給調用者從而實現調用,但是需要注意的是帶參回調函數的用法。
要實現回調,必須先定義函數指標。函數指標的定義這裡稍微提一下。
例如:
int (*ptr)();
這裡ptr是一個函數指針,其中(*ptr)的括號不能省略,
因為括號的優先權高於星號,那樣就成了一個傳回型別為整數的函數宣告了。
總結:以上就是這篇文章的全部內容了,希望對大家有幫助。
以上是C語言如何實作回呼函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

WebStorm Mac版
好用的JavaScript開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能