程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話中的回調函數實例

C說話中的回調函數實例

編輯:關於C++

C說話中的回調函數實例。本站提示廣大學習愛好者:(C說話中的回調函數實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話中的回調函數實例正文


 在C說話中普通用typedef來為回調函數界說別號(參數名)。 別號經由過程宏界說typedef來完成,不是簡略的宏調換。可以用作同時聲明指針型的多個對象。

好比:

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

// 履行回調函數,方法一:經由過程定名方法,pCallBack可以看作是CallBackFun的別號
int call(CallBackFun pCallBack, char *p)
{  
    printf("call 直接打印出字符%s!\n", p);  
    pCallBack(p);  
    return 0;
}

// 履行回調函數,方法二:直接經由過程辦法指針   
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)劃定,完成者(hello,count)就是一個void 指針,完成者只擔任將這個指針轉交給回調函數,而不關懷它究竟指向甚麼數據類型。挪用者曉得本身傳的參數是char 型的,那末在本身供給的回調函數中就應當曉得參數要轉換成char *型來說明。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved