亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言中的回調函數實例

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

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

比如:

復制代碼 代碼如下:

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

先看一個回調函數的例子:
復制代碼 代碼如下:

#include<stdio.h>

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

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

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

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

// 執(zhí)行回調函數,方式二:直接通過方法指針   
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;
}
再看一個回調函數的例子:

#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);
}


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

相關文章

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

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

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

    C/C++中常用加密與解密算法的實現

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

    C++調用matlab函數的實例

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

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

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

    C語言實現類似wget的進度條效果

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

    C語言strlen函數實現讀取字符串長度詳解

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

    Qt拖放操作和打印操作的實現

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

    C++中Socket網絡編程實例詳解

    這篇文章主要介紹了C++中Socket網絡編程實例詳解的相關資料,需要的朋友可以參考下
    2017-04-04
  • C++設計模式之橋接模式

    C++設計模式之橋接模式

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

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

    C++是面向對象編程的,這也是C++與C語言的最大區(qū)別,而類和對象就是C++面向對象的基礎,下面這篇文章主要給大家介紹了關于C++初階教程之類和對象的相關資料,需要的朋友可以參考下
    2022-02-02

最新評論