麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C > 正文

關(guān)于C/C++的回調(diào)函數(shù)

2020-02-24 14:23:54
字體:
供稿:網(wǎng)友

對于很多剛學(xué)習(xí)C語言的小伙伴來說回調(diào)函數(shù)都是非常神秘的,那么你知道回調(diào)函數(shù)的工作原理那些嗎?那么今天小編就將為大家介紹關(guān)于C/C++的回調(diào)函數(shù)。

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

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

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

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

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

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

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

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

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

?

#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("請輸入一個(gè)正整數(shù)/n");
?scanf("%d",&n);

?myCallback(perfect,n);
?return 0;

}

上文就是小編為大家介紹關(guān)于C/C++的回調(diào)函數(shù),上文內(nèi)容都是經(jīng)過本人思考的結(jié)論,如果有什么問題,還希望各位高手能夠指出,本人不勝感謝!

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 色a综合 | 国产99精品 | 91短视频在线免费观看 | 午夜小视频免费观看 | 日韩视频一二三 | 得得啪在线 | 九九热精品在线视频 | 国产精品一区在线免费观看 | 性生活香蕉视频 | 欧美精品久久久久久久久老牛影院 | 欧美成年私人网站 | 91麻豆精品国产91久久久更新资源速度超快 | 欧美日韩在线看片 | 久久福利剧场 | 久久久成人999亚洲区美女 | 国产一区在线免费 | 成人免费一区 | 黄色视屏免费看 | 欧美成人精品h版在线观看 国产一级淫片在线观看 | 免费人成在线观看网站 | xxnxx中国18 | 99精品国产一区二区三区 | 羞羞视频免费网站男男 | 在线成人看片 | 在线免费av网站 | 亚洲91网| 亚洲精品aa| 精精国产xxxx视频在线播放7 | 久久av免费| 性片免费看 | 国产亚洲精品综合一区 | 亚洲最大的成人网 | 91色综合综合热五月激情 | 午夜视频在线观看91 | 免费看毛片的网站 | 久久国产精品久久久久久 | 美女在线视频一区二区 | 国产精品久久久乱弄 | 国产乱淫av一区二区三区 | 黄色片小说 | aa久久|