国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Callback回調(diào)函數(shù)介紹(C語言)

這篇具有很好參考價值的文章主要介紹了Callback回調(diào)函數(shù)介紹(C語言)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1. 回調(diào)函數(shù)的定義

2. 為什么要用回調(diào)函數(shù)

3. 怎么用回調(diào)函數(shù)

3.1 怎么使用沒有參數(shù)的回調(diào)函數(shù)

3.2 怎么使用帶參數(shù)的回調(diào)函數(shù)


1. 回調(diào)函數(shù)的定義

最近在工作中經(jīng)常用到回調(diào)函數(shù)callback,總結(jié)一下。

先來看看維基百科對callback的解釋:In computer programming, a callback is any executable code that is passed as an argument to other code, which is expected to call back (execute) the argument at a given time. This execution may be immediate as in a synchronous callback, or it might happen at a later time as in an asynchronous callback.也就是說,把一段可執(zhí)行的代碼像參數(shù)傳遞一樣傳遞給其他代碼,而這段代碼會在某個時刻被調(diào)用執(zhí)行,這就叫回調(diào)。如果代碼被立即執(zhí)行就被稱為同步回調(diào),如果在之后晚點的某個時間再執(zhí)行,則被稱之為異步回調(diào)。

再來看看來自Stack Overflow某位大神的表述:A “callback” is any function that is called by another function which takes the first function as a parameter. 也就是說,函數(shù)F1調(diào)用函數(shù)F2的時候,函數(shù)F1調(diào)用函數(shù)F2時,F(xiàn)1通過參數(shù)給F2傳遞了另一個函數(shù)F3的指針,在F2執(zhí)行的過程中會調(diào)用函數(shù)F3,這個動作就是回調(diào)(callback),而被作為指針傳入、后面又被回調(diào)的函數(shù)F3就是回調(diào)函數(shù)。

最后再看看百度百科的解釋:回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當(dāng)這個指針被用來調(diào)用其所指向的函數(shù)時,我們就說這是回調(diào)函數(shù)。

2. 為什么要用回調(diào)函數(shù)

為什么不能像普通函數(shù)那樣在回調(diào)的地方直接寫上函數(shù)的名字呢?為什么非得用回調(diào)函數(shù)呢?其實在某些時候回調(diào)函數(shù)可以使用普通函數(shù)來實現(xiàn),但是回調(diào)函數(shù)還是有其存在的作用的。其中回調(diào)函數(shù)最大的好處就是解耦,因此普通函數(shù)不能完全替代回調(diào)函數(shù)。

Callback回調(diào)函數(shù)介紹(C語言)

#include<stdio.h>
#include<softwareLib.h>
int Callback()           //Callback Function
{
    //TODO
    return 0;
}

int main()
{
    //TODO
    Library(Callback);
    //TODO
    return 0;
}

仔細一看,在回調(diào)函數(shù)中,主程序把回調(diào)函數(shù)像參數(shù)一樣傳入庫函數(shù)。這樣一來,只要改變傳進庫函數(shù)的參數(shù),就可以實現(xiàn)不同功能,并且絲毫不需要修改庫函數(shù)的實現(xiàn),這就是解耦。

另外,主函數(shù)和回調(diào)函數(shù)是在同一層的,而庫函數(shù)在另外一層。庫函數(shù)被封裝在庫中,不能修改庫函數(shù)的實現(xiàn),也就是說不能通過修改庫函數(shù)讓庫函數(shù)調(diào)用普通函數(shù)那樣實現(xiàn),那我們就只能通過傳入不同的回調(diào)函數(shù)了。

其實很多地方可以使用普通函數(shù)來替代回調(diào)函數(shù),但是如果需要降低耦合度的時候,更應(yīng)該使用回調(diào)函數(shù)。

3. 怎么用回調(diào)函數(shù)

3.1 怎么使用沒有參數(shù)的回調(diào)函數(shù)

首先來看沒有參數(shù)的回調(diào)函數(shù),下面是一個簡單的可以執(zhí)行的同步回調(diào)函數(shù)代碼。

#include<stdio.h>
int Callback_1()
{
    printf("Hello, this is Callback_1 \n");
    return 0;
}

int Callback_2()
{
    printf("Hello, this is Callback_2 \n");
    return 0;
}

int Callback_3()
{
    printf("Hello, this is Callback_3 \n");
    return 0;
}

int Handle(int (*Callback)())
{
    printf("Entering Handle Function.\n");
    Callback();
    printf("Leaving Handle Function. \n");
}

int main()
{
    printf("Entering Main Funtion. \n");
    Handle(Callback_1);
    Handle(Callback_2);
    Handle(Callback_3);
    printf("Leaving Main Function.\n");
    return 0;
}

運行結(jié)果是:

Entering Main Function.
Entering Handle Function.
Hello, this is Callback_1
Leaving Handle Function.
Entering Handle Function.
Hello, this is Callback_2
Leaving Handle Function.
Entering Handle Function.
Hello, this is Callback_3
Leaving Handle Function.
Leaving Main Function.

可以看到,Hanle()函數(shù)里面的參數(shù)是一個指針,在main()函數(shù)里調(diào)用Handle()函數(shù)時,給它傳入了Callback_1()/Callback_2()/Callback_3()的函數(shù)指針,也就是說,回調(diào)函數(shù)其實是函數(shù)指針的一種用法。再后頭看一遍:“A “callback” is any function that is called by another function which takes the first function as a parameter.” 是不是更明白一些呢?

3.2 怎么使用帶參數(shù)的回調(diào)函數(shù)

上一節(jié)我們知道了回調(diào)函數(shù)怎么使用,如果回調(diào)函數(shù)需要輸入?yún)?shù)呢?當(dāng)然可以使用帶參數(shù)的回調(diào)函數(shù)。只需要簡單修改一下上面的例子:

 #include<stdio.h>

    int Callback_1(int x) // Callback Function 1
{
        printf("Hello, this is Callback_1: x = %d \n", x);
        return 0;
    }

    int Callback_2(int x) // Callback Function 2
{
        printf("Hello, this is Callback_2: x = %d \n", x);
        return 0;
    }

    int Callback_3(int x) // Callback Function 3
{
        printf("Hello, this is Callback_3: x = %d \n", x);
        return 0;
    }

    int Handle(int y, int (*Callback)(int))
{
        printf("Entering Handle Function. \n");
        Callback(y);
        printf("Leaving Handle Function. \n");
    }

    int main()
{
        int a = 2;
        int b = 4;
        int c = 6;
        printf("Entering Main Function. \n");
        Handle(a, Callback_1);
        Handle(b, Callback_2);
        Handle(c, Callback_3);
        printf("Leaving Main Function. \n");
        return 0;
    }

運行結(jié)果是:

Entering Main Function. 
Entering Handle Function. 
Hello, this is Callback_1: x = 2
Leaving Handle Function.
Entering Handle Function. 
Hello, this is Callback_2: x = 4
Leaving Handle Function.
Entering Handle Function.
Hello, this is Callback_3: x = 6
Leaving Handle Function.
Leaving Main Function.

可以看到,只需要回調(diào)函數(shù)增加一個參數(shù),如int Callback_1(int x)?,再在調(diào)用時增加一個參數(shù)(int Handle(int y, int (*Callback)(int))),傳遞給回調(diào)函數(shù)就行了,同理,也可以使用多個參數(shù)的回調(diào)函數(shù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-432417.html

到了這里,關(guān)于Callback回調(diào)函數(shù)介紹(C語言)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Junit?+?Mockito?測試回調(diào)(callback)?方法

    語言:Java JDK:?Java8?及以上。 Java8推出函數(shù)式接口后,就經(jīng)常使用此特性開發(fā)。 在使用Junit?+?Mockito?時遇到有回調(diào)(callback)的函數(shù)方法時,遇到幾種情況,這里進行記錄。 對于Mockito中打樁個人理解:測試的方法在正常環(huán)境需要引入其他類中的方法來 支撐(實) ,但是在

    2024年01月17日
    瀏覽(43)
  • 響應(yīng)式編程Reactor優(yōu)化Callback回調(diào)地獄

    Reactor 是一個基于Reactive Streams規(guī)范的響應(yīng)式編程框架。它提供了一組用于構(gòu)建異步、事件驅(qū)動、響應(yīng)式應(yīng)用程序的工具和庫。Reactor 的核心是 Flux (表示一個包含零到多個元素的異步序列)和 Mono 表示一個包含零或一個元素的異步序列)。 Reactor 通過提供響應(yīng)式的操作符,如

    2024年02月02日
    瀏覽(22)
  • Android JNI傳遞CallBack接口并接收回調(diào)

    在JNI中,可以通過傳遞一個Java接口對象的引用給C++代碼,并在C++代碼中調(diào)用該接口對象的方法,實現(xiàn)JAVA層監(jiān)聽C++數(shù)據(jù)變化,下面是一個簡單的示例: 在Java代碼中定義一個CallBack接口和JNI方法 使用JNI實現(xiàn)將Java接口對象傳遞給C++代碼,并在C++代碼中調(diào)用接口方法。 在C++代碼中

    2024年02月12日
    瀏覽(16)
  • 什么是異步編程?什么是回調(diào)地獄(callback hell)以及如何避免它?

    什么是異步編程?什么是回調(diào)地獄(callback hell)以及如何避免它?

    前端入門之旅:探索Web開發(fā)的奇妙世界 記得點擊上方或者右側(cè)鏈接訂閱本專欄哦 幾何帶你啟航前端之旅 歡迎來到前端入門之旅!這個專欄是為那些對Web開發(fā)感興趣、剛剛踏入前端領(lǐng)域的朋友們量身打造的。無論你是完全的新手還是有一些基礎(chǔ)的開發(fā)者,這里都將為你提供一

    2024年02月10日
    瀏覽(21)
  • c語言函數(shù)指針和指針函數(shù)的區(qū)別,以及回調(diào)函數(shù)的使用。

    c語言函數(shù)指針和指針函數(shù)的區(qū)別,以及回調(diào)函數(shù)的使用。

    函數(shù)指針 是什么,函數(shù)指針本質(zhì)也是指針,不過是指向函數(shù)的指針,存儲的是函數(shù)的地址。 指針函數(shù) 是什么,指針函數(shù)其實就是返回值是指針的函數(shù),本質(zhì)是函數(shù)。 函數(shù)指針是如何定義的呢,如下 這里 * pfun 需要 加括號 ,否則定義為了指針函數(shù)。 指針函數(shù)的定義如下: 下面

    2024年02月11日
    瀏覽(20)
  • 【再識C進階2(中)】詳細介紹指針的進階——函數(shù)指針數(shù)組、回調(diào)函數(shù)、qsort函數(shù)

    【再識C進階2(中)】詳細介紹指針的進階——函數(shù)指針數(shù)組、回調(diào)函數(shù)、qsort函數(shù)

    ??作者簡介: 加油,旭杏,目前大二,正在學(xué)習(xí) C++ , 數(shù)據(jù)結(jié)構(gòu) 等?? ??作者主頁:加油,旭杏的主頁?? ?本文收錄在:再識C進階的專欄?? ??代碼倉庫:旭日東升 1?? ??歡迎大家點贊 ?? 收藏 ? 加關(guān)注哦!???? ???????在這一篇博客中,我們要認(rèn)識并理解 函數(shù)指

    2024年02月09日
    瀏覽(19)
  • 【C語言】回調(diào)函數(shù)(qsort)與模擬實現(xiàn)

    【C語言】回調(diào)函數(shù)(qsort)與模擬實現(xiàn)

    何思何慮,居心當(dāng)如止水;勿取勿忘,為學(xué)當(dāng)如流水?!?出自《格言聯(lián)璧·學(xué)問類》 解釋:無思無慮,心境應(yīng)當(dāng)平靜如水;不求冒進也不忘記,學(xué)業(yè)當(dāng)如流水一般永無止境。 這篇博客我們將會理解回調(diào)函數(shù)這個概念,以及借用qsort幫助理解,并且最終用qsort的思路來實現(xiàn)冒泡

    2024年02月16日
    瀏覽(24)
  • c語言中回調(diào)函數(shù)的理解和使用

    返回總目錄 回調(diào)函數(shù)是通過函數(shù)指針實現(xiàn)的??梢詫⒄{(diào)用者和被調(diào)用者進行解耦,通過一個函數(shù)指針可以關(guān)聯(lián)不同的函數(shù)實現(xiàn),實現(xiàn)前提是函數(shù)指針和函數(shù)實現(xiàn)的參數(shù)類型一致,用戶通過把需要調(diào)用函數(shù)的指針作為參數(shù)傳遞給一個函數(shù)進行實現(xiàn),可以實現(xiàn)個功能模塊之間的解

    2024年02月15日
    瀏覽(19)
  • 【C語言】——指針五:轉(zhuǎn)移表與回調(diào)函數(shù)

    【C語言】——指針五:轉(zhuǎn)移表與回調(diào)函數(shù)

    1.1、轉(zhuǎn)移表的定義 ?? ??在之前的學(xué)習(xí)中,我們學(xué)習(xí)了 函數(shù)指針數(shù)組 (詳情請看【C語言】——指針?biāo)模鹤址羔樑c函數(shù)指針變量),在最后。我曾問到:函數(shù)指針數(shù)組有什么用呢?別急,本文給大家細細道來。 ?? ??函數(shù)指針數(shù)組常常被用在 轉(zhuǎn)移表 中,那轉(zhuǎn)移表是

    2024年03月26日
    瀏覽(30)
  • 【C語言】深入解析C語言中的回調(diào)函數(shù)及其應(yīng)用

    目錄 什么是回調(diào)函數(shù)? 回調(diào)函數(shù)有什么作用? 額外的進階用法? 1. 傳遞多個參數(shù): 2. 回調(diào)函數(shù)和數(shù)據(jù)封裝: 3. 函數(shù)指針的靈活性: 回調(diào)函數(shù)的概念可能有些抽象,讓我們嘗試用一個簡單的生活場景來解釋它。假設(shè)你有一項重要任務(wù)需要完成,但任務(wù)的一部分要依賴于其他

    2024年02月12日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包