首頁 >常見問題 >C語言如何實作回呼函數

C語言如何實作回呼函數

清浅
清浅原創
2019-04-16 14:12:266440瀏覽

回呼函數就是透過一個統一的介面來實現不同的功能,C語言中的回呼函數就是在程式碼中根據所傳的參數不同而呼叫不同的回呼函數

回呼函數就是一個程序員不能明確呼叫的函數;透過將回呼函數的位址傳給呼叫者從而實現呼叫。回呼函數使用是必要的,在我們想要透過一個統一介面實現不同的內容,這時用回呼函數非常合適。

C語言如何實作回呼函數

【推薦教學:C語言教學

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

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

這是我們想要用一個統一的顯示函數,我們這時就可以用回掉函數了。

void show(void (*ptr)());

使用時會根據所傳入的參數不同而呼叫不同的回呼函數。

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

#include <stdlib.h>
#include <stdio.h>
int Test1()
{
    int i;
    for(i=0; i<30; i++)
    {
        printf("The %d th charactor is: %c\n", i, (char)(&#39;a&#39; + i%26));
    }
    return 0;
}
int Test2(int num)
{
    int i;
    for (i=0; i<num; i++)
    {
        printf("The %d th charactor is: %c\n", i, (char)(&#39;a&#39; + i%26));
    }
    return 0;
}
void Caller1( void (*ptr)() )//指向函数的指针作函数参数
{
    (* ptr)();
}
void Caller2(int n, int (*ptr)())//指向函数的指针作函数参数,这里第一个参数是为指向函数的指针服务的,
{
    //不能写成void Caller2(int (*ptr)(int n)),这样的定义语法错误。
    (* ptr)(n);
}
int main()
{
    printf("************************\n");
    Caller1(Test1);     //相当于调用Test1();
    printf("&&&&&&************************\n");
    Caller2(30, Test2); //相当于调用Test2(30);
    return 0;
}

效果圖如下

C語言如何實作回呼函數

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

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

例如:

int (*ptr)();

這裡ptr是一個函數指針,其中(*ptr)的括號不能省略,

因為括號的優先權高於星號,那樣就成了一個傳回型別為整數的函數宣告了。

總結:以上就是這篇文章的全部內容了,希望對大家有幫助。

以上是C語言如何實作回呼函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn