C語(yǔ)言回調(diào)函數(shù)的簡(jiǎn)單運(yùn)用
一、什么是回調(diào)函數(shù)
因?yàn)樵诔绦蛑?,我們有很多的?kù)函數(shù),我們也有很多的上層函數(shù),為了增加程序的靈活性,我們就將一些函數(shù)指針作為參數(shù)傳遞到函數(shù)里面去。
說(shuō)的粗糙一點(diǎn),就是將一個(gè)函數(shù)作為另一個(gè)函數(shù)的函數(shù)參數(shù)。
調(diào)用回調(diào)函數(shù)我們需要一個(gè)中間函數(shù)進(jìn)行過(guò)渡。
這個(gè)中間函數(shù)的參數(shù)是一個(gè)函數(shù)指針。
二、簡(jiǎn)單的回調(diào)函數(shù)
我們來(lái)寫一個(gè)簡(jiǎn)單的例子,幫助我們理解:
#include <stdio.h> /*回調(diào)函數(shù)1*/ void callBack1(void) { printf("this is callback1\n"); } /*回調(diào)函數(shù)2*/ void callBack2(void) { printf("this is callback2\n"); } /*中間函數(shù)*/ /*參數(shù)是一個(gè)函數(shù)指針*/ void calc(void (*func)()) { func(); } int main() { calc(callBack1); printf("************\n"); calc(callBack2); return 0; }
分析一下這個(gè)簡(jiǎn)單的回調(diào)函數(shù)的運(yùn)用。
函數(shù)從main函數(shù)開(kāi)始運(yùn)行,我們將回調(diào)函數(shù)(callBack)作為一個(gè)參數(shù)傳遞到中間函數(shù)(calc)里面,中間函數(shù)通過(guò)函數(shù)指針的方式來(lái)接受,通過(guò)傳入不同的回調(diào)函數(shù)((callBack1)、(callBack2))來(lái)執(zhí)行不同的結(jié)果。
三、帶參數(shù)的回調(diào)函數(shù)
上面的程序簡(jiǎn)單的說(shuō)明了不帶參數(shù)的回調(diào)函數(shù),那么帶參數(shù)的回調(diào)函數(shù)我們也可以依葫蘆畫瓢。
#include <stdio.h> /*回調(diào)函數(shù)1*/ int callBack1(int a,int b) { printf("this multiplication:\n"); return a * b; } /*回調(diào)函數(shù)2*/ int callBack2(int a, int b) { printf("this addition:\n"); return a + b; } /*中間函數(shù)*/ /*參數(shù)是一個(gè)函數(shù)指針*/ int calc(int a,int b,int (*func)()) { func(); } int main() { int p; int q; p = calc(20,20, callBack1); printf("%d\n",p); printf("*********\n"); q = calc(20, 20, callBack2); printf("%d\n", q); return 0; }
在工作中我們的回調(diào)函數(shù)肯定不會(huì)這么簡(jiǎn)單,但是回調(diào)函數(shù)的作用是不去改變底層的程序,通過(guò)獲得底層的數(shù)據(jù)來(lái)得到不同的數(shù)據(jù)。這樣我們的上層會(huì)有很多變化,但是我們的底層程序不會(huì)動(dòng)。
到此這篇關(guān)于C語(yǔ)言回調(diào)函數(shù)的簡(jiǎn)單運(yùn)用的文章就介紹到這了,更多相關(guān)C語(yǔ)言回調(diào)函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解VS2010實(shí)現(xiàn)創(chuàng)建并生成動(dòng)態(tài)鏈接庫(kù)dll的方法
在某些應(yīng)用程序場(chǎng)景下,需要將一些類或者方法編譯成動(dòng)態(tài)鏈接庫(kù)dll,以便別的.exe或者.dll文件可以通過(guò)第三方庫(kù)的方式進(jìn)行調(diào)用,下面就簡(jiǎn)單介紹一下如何通過(guò)VS2010來(lái)創(chuàng)建動(dòng)態(tài)鏈接庫(kù)2022-12-12關(guān)于c++ 智能指針及 循環(huán)引用的問(wèn)題
下面小編就為大家?guī)?lái)一篇關(guān)于c++ 智能指針及 循環(huán)引用的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01VS2019開(kāi)發(fā)簡(jiǎn)單的C/C++動(dòng)態(tài)鏈接庫(kù)并進(jìn)行調(diào)用的實(shí)現(xiàn)
這篇文章主要介紹了VS2019開(kāi)發(fā)簡(jiǎn)單的C/C++動(dòng)態(tài)鏈接庫(kù)并進(jìn)行調(diào)用的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03OpenCV4 實(shí)現(xiàn)背景分離的詳細(xì)步驟(背景減法模型)
背景分離(BS)是一種通過(guò)使用靜態(tài)相機(jī)來(lái)生成前景掩碼(即包含屬于場(chǎng)景中的移動(dòng)對(duì)象像素的二進(jìn)制圖像)的常用技術(shù),本文給大家介紹OpenCV4 實(shí)現(xiàn)背景分離的詳細(xì)步驟,需要的朋友可以參考下2021-09-09QT編寫簡(jiǎn)單登錄界面的實(shí)現(xiàn)示例
登陸界面是網(wǎng)頁(yè)中常見(jiàn)的界面,本文主要介紹了QT編寫簡(jiǎn)單登錄界面的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02IOS開(kāi)發(fā)之UIScrollView實(shí)現(xiàn)圖片輪播器的無(wú)限滾動(dòng)
這篇文章主要介紹了IOS開(kāi)發(fā)之UIScrollView實(shí)現(xiàn)圖片輪播器的無(wú)限滾動(dòng)的相關(guān)資料,需要的朋友可以參考下2017-07-07