欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)者只負責將這個指針轉(zhuǎn)交給回調(diào)函數(shù),而不關(guān)心它到底指向什么數(shù)據(jù)類型。調(diào)用者知道自己傳的參數(shù)是char 型的,那么在自己提供的回調(diào)函數(shù)中就應(yīng)該知道參數(shù)要轉(zhuǎn)換成char *型來解釋。

相關(guān)文章

  • socket編程之bind()函數(shù)使用示例詳解

    socket編程之bind()函數(shù)使用示例詳解

    這篇文章主要為大家介紹了socket編程之bind()函數(shù)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • C/C++中常用加密與解密算法的實現(xiàn)

    C/C++中常用加密與解密算法的實現(xiàn)

    這篇文章主要為大家詳細介紹了一些在C++中常用的加密與解密算法,這其中包括Xor異或、BASE64、AES、MD5、SHA256、RSA等,感興趣的小伙伴可以學習一下
    2023-11-11
  • C++調(diào)用matlab函數(shù)的實例

    C++調(diào)用matlab函數(shù)的實例

    這篇文章主要介紹了C++調(diào)用matlab函數(shù)的方法,包括封裝matlab函數(shù),編譯matlab函數(shù)及C++環(huán)境配置,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • Window10下安裝VS2022社區(qū)版的實現(xiàn)步驟(圖文教程)

    Window10下安裝VS2022社區(qū)版的實現(xiàn)步驟(圖文教程)

    很多和同學們在接觸c語言的時候都是使用VS,本文主要介紹了Window10下如何安裝VS2022社區(qū)版的實現(xiàn)步驟,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • C語言實現(xiàn)類似wget的進度條效果

    C語言實現(xiàn)類似wget的進度條效果

    這篇文章主要介紹了C語言實現(xiàn)類似wget的進度條效果的方法,主要是讓大家可以熟練的使用轉(zhuǎn)移符\r,這里推薦給大家,需要的小伙伴參考下。
    2015-03-03
  • C語言strlen函數(shù)實現(xiàn)讀取字符串長度詳解

    C語言strlen函數(shù)實現(xiàn)讀取字符串長度詳解

    這篇文章主要介紹了用C語言的strlen函數(shù)來實現(xiàn)讀取字符串長度的過程,strlen所作的是一個計數(shù)器的工作,它從內(nèi)存的某個位置開始掃描,直到碰到第一個字符串結(jié)束符'\0'為止
    2022-04-04
  • Qt拖放操作和打印操作的實現(xiàn)

    Qt拖放操作和打印操作的實現(xiàn)

    本文主要介紹了Qt拖放操作和打印操作的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • C++中Socket網(wǎng)絡(luò)編程實例詳解

    C++中Socket網(wǎng)絡(luò)編程實例詳解

    這篇文章主要介紹了C++中Socket網(wǎng)絡(luò)編程實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • C++設(shè)計模式之橋接模式

    C++設(shè)計模式之橋接模式

    這篇文章主要介紹了C++設(shè)計模式之橋接模式,本文講解了什么是橋接模式、為什么要使用橋接模式、什么時候使用橋接模式等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • C++初階教程之類和對象

    C++初階教程之類和對象

    C++是面向?qū)ο缶幊痰?這也是C++與C語言的最大區(qū)別,而類和對象就是C++面向?qū)ο蟮幕A(chǔ),下面這篇文章主要給大家介紹了關(guān)于C++初階教程之類和對象的相關(guān)資料,需要的朋友可以參考下
    2022-02-02

最新評論