C語言中的回呼函數調用過程以及函數指標使用

來源:互聯網
上載者:User

標籤:http   ebooks   地址   void   ref   是你   number   程式員   www.   

回呼函數比喻:

你到一個商店買東西,剛好你要的東西沒有貨,於是你在店員那裡留下了你的電話,過了幾天店裡有貨了,店員就打了你的電話,然後你接到電話後就到店裡去取了貨。

在這個例子裡,你的電話號碼就叫回呼函數,你把電話留給店員就叫登記回呼函數,店裡後來有貨了叫做觸發了回調關聯的事件,店員給你打電話叫做調用回呼函數,你到店裡去取貨叫做響應回調事件。

回呼函數是一個程式員不能顯式調用的函數;通過將回呼函數的地址傳給調用者從而實現調用。

回呼函數使用是必要的,在我們想通過一個統一介面實現不同的內容,這時用回掉函數非常合適。

比如,我們為幾個不同的裝置分別寫了不同的顯示函數:

void TVshow(); void ComputerShow(); void NoteBookShow()...等等。

這是我們想用一個統一的顯示函數,我們這時就可以用回掉函數了。void show(void (*ptr)()); 使用時根據所傳入的參數不同而調用不同的回呼函數。

不同的程式設計語言可能有不同的文法,下面舉一個c語言中回呼函數的例子, 其中一個回呼函數不帶參數,另一個回呼函數帶參數。

// Test.c#include <stdlib.h>#include <stdio.h>int Test1(){        int i;        for (i=0; i<30; i++) {                printf("The %dth charactor is:%c\n", i, (char)(‘a‘+i%26));        }        return 0;}int Test2( int num){        int i;        for (i=0; i< num; i++) {                printf("The %dth charactor is:%c\n", i, (char)(‘a‘+i%26));        }        return 0;}void Caller1( int (*ptr)() )              //指向函數的指標作函數參數 {        (*ptr)();}void Caller2(int n, int (*ptr)(int) )        //指向函數的指標作函數參數,這裡第一個參數是為指向函數的指標服務的, {                                         //不能寫成void Caller2(int (*ptr)(int n)),這樣的定義語法錯誤。        (*ptr)(n);}int main(){        printf("***************************\n");        Caller1(Test1); //相當於調用Test1();         printf("&&&&&&&**********************\n");        Caller2(5, Test2);//相當於調用Test2(5);        return 0;}

以上通過將回呼函數的地址傳給調用者從而實現調用,但是需要注意的是帶參回呼函數的用法。

要實現回調,必須首先定義函數指標。函數指標的定義這裡稍 微提一下。比如:

int (*ptr)(); 

這裡ptr是一個函數指標,其中(*ptr)的括弧不能省略,因為括弧的優先順序高於星號,那樣就成了一個傳回型別為指向整型的指標類型的函式宣告了。

參考連結
http://www.zhihu.com/question/19801131/answer/13005983

http://www.blogjava.net/huyi2006/articles/180169.html

C語言中的回呼函數調用過程以及函數指標使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.