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 *型來說明。