最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中的回調(diào)函數(shù)實例

 更新時間:2014年04月28日 09:02:31   作者:  
如果函數(shù)A的指針作為函數(shù)B的參數(shù),在函數(shù)B中利用該指針調(diào)用函數(shù)A,則此時的A就是回調(diào)函數(shù)。

 在C語言中一般用typedef來為回調(diào)函數(shù)定義別名(參數(shù)名)。 別名通過宏定義typedef來實現(xiàn),不是簡單的宏替換??梢杂米魍瑫r聲明指針型的多個對象。

比如:

復制代碼 代碼如下:

char *pa,pb;//pa是一個char型指針,但pb是一個char型字符。我們可以這樣來實現(xiàn)
typedef char* PCHAR;
PCHAR pa,pb;//pa和pb都是char型指針

先看一個回調(diào)函數(shù)的例子:
復制代碼 代碼如下:

#include<stdio.h>

//方法指針的格式為:int (*ptr)(char *p) 即:返回值(指針名)(參數(shù)列表)
typedef int (*CallBackFun)(char *p);    //為回調(diào)函數(shù)命名,類型命名為 CallBackFun,參數(shù)為char *p

//方法 Afun,格式符合 CallBackFun 的格式,因此可以看作是一個 CallBackFun  
int Afun(char *p)
{
    printf("Afun 回調(diào)打印出字符%s!\n", p);  
    return 0;
}

// 方法 Cfun,格式符合 CallBackFun 的格式,因此可以看作是一個 CallBackFun
int Cfun(char *p)
{  
    printf("Cfun 回調(diào)打印:%s, Nice to meet you!\n", p);  
    return 0;
}

// 執(zhí)行回調(diào)函數(shù),方式一:通過命名方式,pCallBack可以看做是CallBackFun的別名
int call(CallBackFun pCallBack, char *p)
{  
    printf("call 直接打印出字符%s!\n", p);  
    pCallBack(p);  
    return 0;
}

// 執(zhí)行回調(diào)函數(shù),方式二:直接通過方法指針   
int call2(char *p, int (*ptr)())  //或者是int call2(char *p, int (*ptr)(char *)) 同時ptr可以任意取名
{
    printf("==============\n", p);   
    (*ptr)(p);
}

int main()
{  
    char *p = "hello";
    call(Afun, p);  
    call(Cfun, p);
    call2(p, Afun);  
    call2(p, Cfun);
    return 0;
}
再看一個回調(diào)函數(shù)的例子:

#include <stdio.h>
typedef void (*callback)(char *);
void repeat(callback function, char *para)
{
    function(para);
    function(para);
}

void hello(char* a)
{
     printf("Hello %s\n",(const char *)a);
}

void count(char *num)
{
     int i;
     for(i=1;i<(int)num;i++)
          printf("%d",i);
     putchar('\n');
}

int main(void)
{
     repeat(hello,"Huangyi");
     repeat(count, (char *)4);
}


本例中回調(diào)函數(shù)的參數(shù)按什么類型解釋由調(diào)用者(repeat)規(guī)定,實現(xiàn)者(hello,count)就是一個void 指針,實現(xiàn)者只負責將這個指針轉交給回調(diào)函數(shù),而不關心它到底指向什么數(shù)據(jù)類型。調(diào)用者知道自己傳的參數(shù)是char 型的,那么在自己提供的回調(diào)函數(shù)中就應該知道參數(shù)要轉換成char *型來解釋。

相關文章

  • 詳解C++中十六進制字符串轉數(shù)字(數(shù)值)

    詳解C++中十六進制字符串轉數(shù)字(數(shù)值)

    這篇文章主要介紹了詳解C++中十六進制字符串轉數(shù)字(數(shù)值)的相關資料,這里提供兩種實現(xiàn)方法,需要的朋友可以參考下
    2017-08-08
  • 詳解C++ 內(nèi)存對齊

    詳解C++ 內(nèi)存對齊

    這篇文章主要介紹了C++ 內(nèi)存對齊的相關資料,幫助大家更好的理解和使用c++編程語言,感興趣的朋友可以了解下
    2021-01-01
  • 一篇文章帶你使用C語言編寫內(nèi)核

    一篇文章帶你使用C語言編寫內(nèi)核

    內(nèi)核是操作系統(tǒng)最核心的內(nèi)容,主要提供硬件抽象層、磁盤及文件系統(tǒng)控制、多任務等功能,由于其涉及非常廣泛的計算機知識,很少被人們所熟悉,因而披上了一層神秘的面紗
    2021-08-08
  • C++虛析構函數(shù)的使用分析

    C++虛析構函數(shù)的使用分析

    本篇文章是對C++虛析構函數(shù)的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 深入解析C++的循環(huán)鏈表與雙向鏈表設計的API實現(xiàn)

    深入解析C++的循環(huán)鏈表與雙向鏈表設計的API實現(xiàn)

    這篇文章主要介紹了C++的循環(huán)鏈表與雙向鏈表設計的API實現(xiàn),文中的示例對于鏈表結點的操作起到了很好的說明作用,需要的朋友可以參考下
    2016-03-03
  • C++基礎入門教程(九):函數(shù)指針之回調(diào)

    C++基礎入門教程(九):函數(shù)指針之回調(diào)

    這篇文章主要介紹了C++基礎入門教程(九):函數(shù)指針之回調(diào),本文講解了函數(shù)的地址、聲明函數(shù)指針、歷史原因、typedef挽救復雜的函數(shù)指針等內(nèi)容,需要的朋友可以參考下
    2014-11-11
  • 用C語言編寫推箱子游戲

    用C語言編寫推箱子游戲

    這篇文章主要為大家詳細介紹了用C語言編寫推箱子游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++實現(xiàn)LeetCode(126.詞語階梯之二)

    C++實現(xiàn)LeetCode(126.詞語階梯之二)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(126.詞語階梯之二),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言中pow函數(shù)使用方法、注意事項以及常見報錯原因

    C語言中pow函數(shù)使用方法、注意事項以及常見報錯原因

    在c語言當中我們要計算一個數(shù)的n次方時候,可以使用多種方法,但是也有一種比較簡單的方法,便是調(diào)用一個函數(shù)pow函數(shù),下面這篇文章主要給大家介紹了關于C語言中pow函數(shù)使用方法、注意事項以及常見報錯原因的相關資料,需要的朋友可以參考下
    2022-11-11
  • Matlab實現(xiàn)鼠標光標變成愛心和瞄準鏡形狀

    Matlab實現(xiàn)鼠標光標變成愛心和瞄準鏡形狀

    這篇文章主要為大家詳細介紹了如何利用Matlab實現(xiàn)將鼠標光標變成愛心和瞄準鏡等形狀,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-08-08

最新評論

聊城市| 安吉县| 孟州市| 蕲春县| 祁东县| 温泉县| 通渭县| 南宫市| 二手房| 大关县| 龙胜| 馆陶县| 屏边| 普陀区| 台北市| 高碑店市| 长泰县| 巴东县| 镇坪县| 板桥市| 稻城县| 漳浦县| 松溪县| 民丰县| 吉木萨尔县| 城口县| 龙江县| 兴仁县| 建德市| 曲麻莱县| 新和县| 永福县| 浙江省| 南皮县| 方山县| 武定县| 托克逊县| 赞皇县| 江油市| 龙州县| 瓦房店市|