91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

函數(shù)指針與回調(diào)函數(shù)

嵌入式應(yīng)用開(kāi)發(fā) ? 來(lái)源:嵌入式應(yīng)用開(kāi)發(fā) ? 作者:嵌入式應(yīng)用開(kāi)發(fā) ? 2022-09-09 08:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

函數(shù)指針:

linux驅(qū)動(dòng)面向?qū)ο?a target="_blank">編程思想中用的最多,利用函數(shù)指針來(lái)實(shí)現(xiàn)封裝,下面以一個(gè)簡(jiǎn)單的例子說(shuō)明:

#include 

typedef struct TFT_DISPLAY
{
    int   pix_width;
    int   pix_height;
    int   color_width;
    void (*init)(void);
    void (*fill_screen)(int color);
    void (*tft_test)(void);

}tft_display;

static void init(void)
{
    printf("the display is initialed\n");
}

static void fill_screen(int color)
{
    printf("the display screen set 0x%x\n",color);

}

tft_display mydisplay=
{
    .pix_width=320,
    .pix_height=240,
    .color_width=24,
    .init=init,
    .fill_screen=fill_screen,
};

int main(int argc, char **argv)
{

    mydisplay.init();
    mydisplay.fill_screen(0xfff);
    return 0;
}

上面的例子將一個(gè)tft_display封裝成一個(gè)對(duì)象,上面的結(jié)構(gòu)體成員中最后一個(gè)沒(méi)有初始化,這在Linux中用的非常多,最常見(jiàn)的是file_operations結(jié)構(gòu)體,該結(jié)構(gòu)體一般來(lái)說(shuō)只需要初始化常見(jiàn)的函數(shù),不需要全部初始化。上面代碼中采用的結(jié)構(gòu)體初始化方式也是在Linux中最常用的一種方式,這種方式的好處在于無(wú)需按照結(jié)構(gòu)體的順序一對(duì)一。

回調(diào)函數(shù):

有時(shí)候會(huì)遇到這樣一種情況,當(dāng)上層人員將一個(gè)功能交給下層程序員完成時(shí),上層程序員和下層程序員同步工作,這個(gè)時(shí)候該功能函數(shù)并未完成,這個(gè)時(shí)候上層程序員可以定義一個(gè)API來(lái)交給下層程序員,而上層程序員只要關(guān)心該API就可以了而無(wú)需關(guān)心具體實(shí)現(xiàn),具體實(shí)現(xiàn)交給下層程序員完成即可(這里的上層和下層程序員不指等級(jí)關(guān)系,而是項(xiàng)目的分工關(guān)系)。這種情況下就會(huì)用到回調(diào)函數(shù)(Callback Function),現(xiàn)在假設(shè)程序員A需要一個(gè)FFT算法,這個(gè)時(shí)候程序員A將FFT算法交給程序員B來(lái)完成,現(xiàn)在來(lái)讓實(shí)現(xiàn)這個(gè)過(guò)程:

int  InputData[100]={0};
int OutputData[100]={0};

void FFT_Function(int *inputData,int *outputData,int num)
{
    while(num--)
    {

    }
}

void TaskA_CallBack(void (*fft)(int*,int*,int))
{

    (*fft)(InputData,OutputData,100);
}

int main(int argc, char **argv)
{

    TaskA_CallBack(FFT_Function);
    return 0;
}

上面的代碼中TaskA_CallBack是回調(diào)函數(shù),該函數(shù)的形參為一個(gè)函數(shù)指針,而FFT_Function是一個(gè)被調(diào)用函數(shù)??梢钥吹交卣{(diào)函數(shù)中申明的函數(shù)指針必須和被調(diào)用函數(shù)的類型完全相同。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    88

    文章

    11760

    瀏覽量

    219032
  • 回調(diào)函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    95

    瀏覽量

    12195
  • 函數(shù)指針
    +關(guān)注

    關(guān)注

    2

    文章

    57

    瀏覽量

    4151
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    一文詳解C語(yǔ)言函數(shù)指針調(diào)函數(shù)

    在講調(diào)函數(shù)之前,我們需要了解函數(shù)指針。
    發(fā)表于 10-19 09:34 ?2373次閱讀

    C語(yǔ)言里面的函數(shù)指針調(diào)函數(shù)

    在講調(diào)函數(shù)之前,我們需要了解函數(shù)指針。
    發(fā)表于 12-13 10:28 ?1079次閱讀

    一文詳解函數(shù)指針調(diào)函數(shù)

    函數(shù)指針是指向函數(shù)指針變量。它允許我們將函數(shù)作為參數(shù)傳遞給其他函數(shù)或?qū)?/div>
    發(fā)表于 08-22 10:36 ?993次閱讀

    函數(shù)指針調(diào)函數(shù)解讀

    是,在程序執(zhí)行期間可以動(dòng)態(tài)更改被調(diào)用的調(diào)函數(shù)。 一、函數(shù)指針函數(shù)
    發(fā)表于 01-19 07:34

    函數(shù)指針指針函數(shù)、調(diào)函數(shù)總結(jié)分享!

    看藍(lán)牙協(xié)議棧的時(shí)候遇到了調(diào)函數(shù),之前就沒(méi)有用過(guò),函數(shù)指針、函數(shù)
    發(fā)表于 10-15 19:23

    C語(yǔ)言調(diào)函數(shù)學(xué)習(xí)

    對(duì)指針的應(yīng)用是C語(yǔ)言編程的精髓所在,而回調(diào)函數(shù)就是C語(yǔ)言里面對(duì)函數(shù)指針的高級(jí)應(yīng)用。簡(jiǎn)而言之,
    發(fā)表于 05-27 09:44 ?7429次閱讀

    基于Qt組件的俄羅斯方塊設(shè)計(jì)

    函數(shù)指針調(diào)函數(shù)響應(yīng)觸發(fā)的每個(gè)動(dòng)作。而在QT中信號(hào)和槽取代了函數(shù)
    發(fā)表于 11-15 15:16 ?9次下載

    C語(yǔ)言函數(shù)調(diào)函數(shù)

    ,如果過(guò)后再執(zhí)行,則稱之為異步調(diào)調(diào)函數(shù)就是一個(gè)通過(guò)函數(shù)
    的頭像 發(fā)表于 09-11 09:57 ?4840次閱讀

    詳解調(diào)函數(shù)的概念及使用步驟

    調(diào)函數(shù)就是一個(gè)被作為參數(shù)傳遞的函數(shù)。在C語(yǔ)言中,調(diào)函數(shù)
    的頭像 發(fā)表于 05-26 15:20 ?4832次閱讀

    函數(shù)指針調(diào)函數(shù)的使用方法

    了解開(kāi)發(fā)語(yǔ)言的朋友應(yīng)該都會(huì)對(duì)調(diào)函數(shù)有所了解,在很多的程序開(kāi)發(fā)語(yǔ)言中都能看到調(diào)的身影。很多場(chǎng)景下,當(dāng)某個(gè)條件成立以后我們希望代碼執(zhí)行某些指
    的頭像 發(fā)表于 04-10 15:08 ?1932次閱讀

    嵌入式函數(shù)調(diào)注冊(cè)機(jī)制的實(shí)現(xiàn)

    嵌入式函數(shù)調(diào)注冊(cè)機(jī)制是一種常用的解耦技術(shù),它通過(guò)在應(yīng)用程序中注冊(cè)調(diào)函數(shù)的方式來(lái)實(shí)現(xiàn)模塊之間的通信,從而使系統(tǒng)更加靈活、可擴(kuò)展和易于維護(hù)。
    的頭像 發(fā)表于 04-13 15:52 ?2332次閱讀

    C語(yǔ)言技巧之調(diào)函數(shù)

    在講調(diào)函數(shù)之前,我們需要了解函數(shù)指針。
    的頭像 發(fā)表于 04-18 11:50 ?1471次閱讀

    C++函數(shù)指針調(diào)函數(shù)詳解

    指針是一個(gè)變量,是用來(lái)指向內(nèi)存地址。
    發(fā)表于 08-21 15:07 ?1806次閱讀
    C++<b class='flag-5'>函數(shù)</b><b class='flag-5'>指針</b>和<b class='flag-5'>回</b><b class='flag-5'>調(diào)</b><b class='flag-5'>函數(shù)</b>詳解

    函數(shù)指針調(diào)函數(shù)的應(yīng)用實(shí)例

    通常我們說(shuō)的指針變量是指向一個(gè)整型、字符型或數(shù)組等變量,而函數(shù)指針是指向函數(shù)函數(shù)指針
    的頭像 發(fā)表于 03-07 11:13 ?1022次閱讀
    <b class='flag-5'>函數(shù)</b><b class='flag-5'>指針</b>與<b class='flag-5'>回</b><b class='flag-5'>調(diào)</b><b class='flag-5'>函數(shù)</b>的應(yīng)用實(shí)例

    調(diào)函數(shù)(callback)是什么?調(diào)函數(shù)的實(shí)現(xiàn)方法

    調(diào)函數(shù)是一種特殊的函數(shù),它作為參數(shù)傳遞給另一個(gè)函數(shù),并在被調(diào)用函數(shù)執(zhí)行完畢后被調(diào)用。
    發(fā)表于 03-12 11:46 ?4887次閱讀