程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C/C++回調函數引見

C/C++回調函數引見

編輯:關於C++

C/C++回調函數引見。本站提示廣大學習愛好者:(C/C++回調函數引見)文章只能為提供參考,不一定能成為您想要的結果。以下是C/C++回調函數引見正文


關於許多初學者來講,常常認為回調函數很奧秘,很想曉得回調函數的任務道理。本文將要說明甚麼是回調函數、它們有甚麼利益、為何要應用它們等等成績,在開端之前,假定你曾經熟知了函數指針。

甚麼是回調函數?

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

為何要應用回調函數?

由於可以把挪用者與被挪用者離開。挪用者不關懷誰是被挪用者,一切它需曉得的,只是存在一個具有某種特定原型、某些限制前提(如前往值為int)的被挪用函數。

假如想曉得回調函數在現實中有甚麼感化,先假定有如許一種情形,我們要編寫一個庫,它供給了某些排序算法的完成,如冒泡排序、疾速排序、shell排序、shake排序等等,但為使庫加倍通用,不想在函數中嵌入排序邏輯,而讓應用者來完成響應的邏輯;或許,想讓庫可用於多種數據類型(int、float、string),此時,該怎樣辦呢?可使用函數指針,並停止回調。

回調可用於告訴機制,例如,有時要在法式中設置一個計時器,每到必定時光,法式會獲得響應的告訴,但告訴機制的完成者對我們的法式一竅不通。而此時,就需有一個特定原型的函數指針,用這個指針來停止回調,來告訴我們的法式事宜曾經產生。現實上,SetTimer() API應用了一個回調函數來告訴計時器,並且,萬一沒有供給回調函數,它還會把一個新聞發往法式的新聞隊列。

另外一個應用回調機制的API函數是EnumWindow(),它列舉屏幕上一切的頂層窗口,為每一個窗口挪用一個法式供給的函數,並傳遞窗口的處置法式。假如被挪用者前往一個值,就持續停止迭代,不然,加入。EnumWindow()其實不關懷被挪用者在何處,也不關懷被挪用者用它傳遞的處置法式做了甚麼,它只關懷前往值,由於基於前往值,它將持續履行或加入。

不論怎樣說,回調函數是持續自C說話的,因此,在C++中,應只在與C代碼樹立接口,或與已有的回調接口打交道時,才應用回調函數。除上述情形,在C++中應應用虛擬辦法或函數符(functor),而不是回調函數。

上面是本身寫的一個簡略的回調函數,比擬其他的那些龐雜的代碼,這個更輕易懂得:

#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是完數\n",n);
 else printf("%d不是完數\n",n);
}
void myCallback(void (*perfect)(int ),int n)
{
 perfect(n);
}

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

 myCallback(perfect,n);
 return 0;

}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved