位置:搜学搜课 > 新闻 > 贵阳哪个c++培训学校好
双系统C/C++编程+区块链+Go语言+数据库
C语言经近40年雕琢,广泛应用于各个行业
项目落地+重构,助你不仅能编程-更精编程
模块化教学,每个讲师负责所擅长领域
美国上市教育机构
贵阳哪个c++培训学校好,如果参数是一个函数指针,调用者可以传递一个函数的地址给实现者,让实现者去调用它,这就是回调函数。
void func(void(*f)(void*),void*p)
提供一个回调函数,再提供一个准备传给回调函数的参数;把回调函数传给参数f,把准备传给回调函数的参数按void*类型传给参数p。在适当的时候根据调用者传来的函数指针f调用回调函数,即调用f(p)。
首先使用typedef定义回调函数类型
typedef void(*event_cb_t)(const struct event*evt,void*userdata)
上面的语句表示event_cb_t类型函数范围值类型为void类型。
定义并实现一个函数用于注册回调函数
event_cb_register(event_cb_t cb,void*userdata);
下面是注册回调函数my_event_cb的一个模板
static void my_event_cb(const struct event*evt,void*data)
{
/*do stuff and things with the event*/
}
...
event_cb_register(my_event_cb,&my_custom_data);
...
在事件调度器(event dispatcher)中,常常将回调函数放在结构体中,
struct event_cb{event_cb_t cb;void*data;};
此时通过访问结构体成员变量调用回调函数
struct event_cb*callback;
...
/*Get the event_cb that you want to execute*/
callback->cb(event,callback->data);
一个回调函数的例子
#include<stdio.h>
struct event_cb;
typedef void(*event_cb_t)(const struct event_cb*evt,void*user_data);
struct event_cb
{
event_cb_t cb;
void*data;
};
static struct event_cb saved={0,0};
void event_cb_register(event_cb_t cb,void*user_data)
{
saved.cb=cb;
saved.data=user_data;
}
static void my_event_cb(const struct event_cb*evt,void*data)
{
printf("in%s\n",__func__);
printf("data1:%s\n",(const char*)data);
printf("data2:%s\n",(const char*)evt->data);
}
int main(void)
{
char my_custom_data[40]="Hello!";
event_cb_register(my_event_cb,my_custom_data);
saved.cb(&saved,saved.data);
return 0;
}
以上就是小编讲的大致内容了,还有什么相关问题要问的,达内IT教育涵盖基本行业知识,安排的合理,专业师资,小班授课,费用低,学习快,400咨询热线,24小时答疑。
尊重原创文章,转载请注明出处与链接:http://www.soxsok.com/wnews133845.html 违者必究! 以上就是关于“贵阳哪个c++培训学校好”的全部内容了,想了解更多相关知识请持续关注本站。