最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++回調(diào)函數(shù)介紹

 更新時間:2013年10月10日 09:20:40   作者:  
回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當(dāng)這個指針被用為調(diào)用它所指向的函數(shù)時,我們就說這是回調(diào)函數(shù)

對于很多初學(xué)者來說,往往覺得回調(diào)函數(shù)很神秘,很想知道回調(diào)函數(shù)的工作原理。本文將要解釋什么是回調(diào)函數(shù)、它們有什么好處、為什么要使用它們等等問題,在開始之前,假設(shè)你已經(jīng)熟知了函數(shù)指針。

什么是回調(diào)函數(shù)?

簡而言之,回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當(dāng)這個指針被用為調(diào)用它所指向的函數(shù)時,我們就說這是回調(diào)函數(shù)。

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

因為可以把調(diào)用者與被調(diào)用者分開。調(diào)用者不關(guān)心誰是被調(diào)用者,所有它需知道的,只是存在一個具有某種特定原型、某些限制條件(如返回值為int)的被調(diào)用函數(shù)。

如果想知道回調(diào)函數(shù)在實際中有什么作用,先假設(shè)有這樣一種情況,我們要編寫一個庫,它提供了某些排序算法的實現(xiàn),如冒泡排序、快速排序、shell排序、shake排序等等,但為使庫更加通用,不想在函數(shù)中嵌入排序邏輯,而讓使用者來實現(xiàn)相應(yīng)的邏輯;或者,想讓庫可用于多種數(shù)據(jù)類型(int、float、string),此時,該怎么辦呢?可以使用函數(shù)指針,并進行回調(diào)。

回調(diào)可用于通知機制,例如,有時要在程序中設(shè)置一個計時器,每到一定時間,程序會得到相應(yīng)的通知,但通知機制的實現(xiàn)者對我們的程序一無所知。而此時,就需有一個特定原型的函數(shù)指針,用這個指針來進行回調(diào),來通知我們的程序事件已經(jīng)發(fā)生。實際上,SetTimer() API使用了一個回調(diào)函數(shù)來通知計時器,而且,萬一沒有提供回調(diào)函數(shù),它還會把一個消息發(fā)往程序的消息隊列。

另一個使用回調(diào)機制的API函數(shù)是EnumWindow(),它枚舉屏幕上所有的頂層窗口,為每個窗口調(diào)用一個程序提供的函數(shù),并傳遞窗口的處理程序。如果被調(diào)用者返回一個值,就繼續(xù)進行迭代,否則,退出。EnumWindow()并不關(guān)心被調(diào)用者在何處,也不關(guān)心被調(diào)用者用它傳遞的處理程序做了什么,它只關(guān)心返回值,因為基于返回值,它將繼續(xù)執(zhí)行或退出。

不管怎么說,回調(diào)函數(shù)是繼續(xù)自C語言的,因而,在C++中,應(yīng)只在與C代碼建立接口,或與已有的回調(diào)接口打交道時,才使用回調(diào)函數(shù)。除了上述情況,在C++中應(yīng)使用虛擬方法或函數(shù)符(functor),而不是回調(diào)函數(shù)。

下面是自己寫的一個簡單的回調(diào)函數(shù),相比其他的那些復(fù)雜的代碼,這個更容易理解:

復(fù)制代碼 代碼如下:

#include<stdio.h>
#include<stdlib.h>
void perfect(int n)
{
 int i=1;
    int count=0;
 for(i=1;i<n;i++)
 {

  if(0==n%i)
  {
   count+=i;
  }
 }
 if(count==n)
  printf("%d是完數(shù)\n",n);
 else printf("%d不是完數(shù)\n",n);
}
void myCallback(void (*perfect)(int ),int n)
{
 perfect(n);
}

int main()
{
 int n;
 printf("請輸入一個正整數(shù)\n");
 scanf("%d",&n);

 myCallback(perfect,n);
 return 0;

}

相關(guān)文章

  • 基于VC編寫COM連接點事件的分析介紹

    基于VC編寫COM連接點事件的分析介紹

    本篇文章是對VC編寫COM連接點事件進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Qt之使用GraphicsView框架實現(xiàn)思維導(dǎo)圖的示例

    Qt之使用GraphicsView框架實現(xiàn)思維導(dǎo)圖的示例

    思維導(dǎo)圖可以更方便的整理知識,本文主要介紹了Qt之使用GraphicsView框架實現(xiàn)思維導(dǎo)圖的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C++表達式求值詳解

    C++表達式求值詳解

    下面小編就為大家?guī)硪黄獪\談C++ 語言中的表達式求值。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-10-10
  • C++20中的span容器及用法小結(jié)

    C++20中的span容器及用法小結(jié)

    std::span 是一個非常實用的工具,可以方便地對數(shù)據(jù)進行訪問和處理,同時也可以提高代碼的可讀性、可維護性和安全性,這篇文章主要介紹了C++20中的span容器,需要的朋友可以參考下
    2023-03-03
  • 關(guān)于C++中二分法詳解

    關(guān)于C++中二分法詳解

    大家好,本篇文章主要講的是關(guān)于C++中二分法詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • C++ std::async的使用總結(jié)

    C++ std::async的使用總結(jié)

    這篇文章主要介紹了C++ std::async的使用總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C++獲取本地時間常見方法匯總

    C++獲取本地時間常見方法匯總

    這篇文章主要介紹了C++獲取本地時間的常見方法,幫助大家更好的理解和學(xué)習(xí)C++,感興趣的朋友可以了解下
    2020-08-08
  • 亞馬遜經(jīng)典面試題實例詳解

    亞馬遜經(jīng)典面試題實例詳解

    這篇文章主要介紹了亞馬遜經(jīng)典面試題實例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • C++設(shè)置超時時間的簡單實現(xiàn)方法

    C++設(shè)置超時時間的簡單實現(xiàn)方法

    這篇文章主要介紹了C++設(shè)置超時時間的簡單實現(xiàn)方法,涉及系統(tǒng)函數(shù)setsockopt對套接口的操作,具有一定的實用價值,需要的朋友可以參考下
    2014-10-10
  • C語言廣播的使用詳解

    C語言廣播的使用詳解

    顧名思義可以把自己的數(shù)據(jù)發(fā)送給在特定范圍內(nèi)的所有人;我們網(wǎng)絡(luò)編程中的廣播一般是通過特定的廣播地址把自己的數(shù)據(jù)發(fā)送給局域網(wǎng)內(nèi)當(dāng)前在線的客戶端
    2022-05-05

最新評論

行唐县| 宣城市| 三河市| 恩平市| 西吉县| 瑞丽市| 涟水县| 怀柔区| 曲靖市| 石棉县| 化德县| 开远市| 彰化县| 禹州市| 平安县| 仙桃市| 衡阳市| 潞西市| 大竹县| 西昌市| 昌都县| 清苑县| 巴青县| 鹤山市| 柘荣县| 临泉县| 鄂托克前旗| 新乡县| 汕尾市| 长岭县| 云林县| 奉化市| 东乡| 开化县| 砚山县| 响水县| 青神县| 镶黄旗| 遂平县| 察哈| 托克托县|