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