欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

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

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

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

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

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

復制代碼 代碼如下:

#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;

}

相關文章

  • C++實現(xiàn)電子時鐘效果

    C++實現(xiàn)電子時鐘效果

    這篇文章主要為大家詳細介紹了C++實現(xiàn)電子時鐘效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++ EasyX學習之鼠標操作詳解

    C++ EasyX學習之鼠標操作詳解

    EasyX是針對C/C++的圖形庫,可以幫助使用C/C++語言的程序員快速上手圖形和游戲編程。本文將為大家詳細講講EasyX的鼠標操作,需要的可以參考一下
    2022-07-07
  • C++如何調用matlab函數(shù)

    C++如何調用matlab函數(shù)

    這篇文章主要介紹了C++如何調用matlab函數(shù)的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-11-11
  • 淺談分詞器Tokenizer

    淺談分詞器Tokenizer

    分詞器的工作就是分解文本流成詞(tokens).在這個文本中,每一個token都是這些字符的一個子序列。一個分析器(analyzer)必須知道它所配置的字段,但是tokenizer不需要,分詞器(tokenizer)從一個字符流(reader)讀取數(shù)據(jù),生成一個Token對象(TokenStream)的序列
    2021-06-06
  • C++之函數(shù)的重載

    C++之函數(shù)的重載

    這篇文章主要介紹了c++函數(shù)重載的相關知識,文章講解的非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2021-11-11
  • c語言和c++語言中const修飾的變量區(qū)別淺析

    c語言和c++語言中const修飾的變量區(qū)別淺析

    這篇文章主要給大家介紹了關于c語言和c++語言中const修飾的變量區(qū)別的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • C++結構體字節(jié)對齊和共用體大小

    C++結構體字節(jié)對齊和共用體大小

    這篇文章主要介紹了C++結構體字節(jié)對齊和共用體大小,結構體內存對齊在筆試和面試中經常被問到,所以這篇文章做個總結,首先通過代碼驗證不同結構體的內存大小,需要的朋友可以參考下
    2021-11-11
  • 詳解C++中的萬能頭文件

    詳解C++中的萬能頭文件

    C++萬能頭文件它是一個包含了每一個標準庫的頭文件,接下來通過本文給大家介紹C++中的萬能頭文件及優(yōu)缺點,需要的朋友可以參考下
    2023-02-02
  • vscode和cmake編譯多個C++文件的實現(xiàn)方法

    vscode和cmake編譯多個C++文件的實現(xiàn)方法

    這篇文章主要介紹了vscode和cmake編譯多個C++文件的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • C和C++ const的聲明差異

    C和C++ const的聲明差異

    本文給大家簡單匯總了下C語言的const與C++的const的聲明差異,非常的簡單,也很實用,有需要的小伙伴可以參考下
    2016-03-03

最新評論