网站的域名做邮箱吗,设计制作中国第一架飞机的人是,wordpress源码买卖,建设工程项目管理这是一个同学在微信给我提问的问题。要搞清楚回调函数#xff0c;我们首先要搞清楚函数#xff0c;函数其实就是一个地址#xff0c;这个地址描述了这个函数在内存中的位置。但是函数和变量也是一样的#xff0c;有类型#xff0c;对变量来说#xff0c;变量会分成各种类… 这是一个同学在微信给我提问的问题。要搞清楚回调函数我们首先要搞清楚函数函数其实就是一个地址这个地址描述了这个函数在内存中的位置。但是函数和变量也是一样的有类型对变量来说变量会分成各种类型对函数来说也是一样函数会有参数和返回值不同的参数和返回值就描述了不同的函数。那回调函数呢回调函数其实是一个连锁反应比如你小孩生病了这会导致你老婆可能不开心你老婆不开心了会连锁反应到你也会不开心。不开心这个信心从你老婆传递到了你身上你小孩就起到了函数调用的作用。我们可以写个简单的代码#include stdio.h
#include unistd.h
#include stdlib.hvoid func(void *f(int),int parm)
{f(parm);
}void call_back(int parm)
{printf(%s(),LINE%d,args%d\n,__FUNCTION__,__LINE__,parm);
}int main(void)
{func(call_back,123);return 0;
}代码运行$main
call_back(),LINE12,args123从项目角度上看callback是一个人实现然后func里面会是另一个人实现我们在main里面会把回调的指针注册给func等某个时机成熟的时候func就会调用这个指针来做它想做的事情。但是从C语言和计算机角度出发函数无非就是一个地址我们传递的是一个地址后面我们只是用了这个地址来做了我们想做的事情。#include stdio.h
#include unistd.h
#include stdlib.htypedef void (*type_func)(int);void func(u_int64_t* ptr,int parm)
{((type_func)ptr)(parm);
}void call_back(int parm)
{printf(%s(),LINE%d,args%d\n,__FUNCTION__,__LINE__,parm);
}int main(void)
{func((u_int64_t*)call_back,123);return 0;
}这段代码里面的信息就会比较多了一个是用了typedef来修饰一个函数指针的类型然后我们在传call_back的时候强制让它变成了一个地址之后拿到这个地址后再让它变成一个函数。写这个demo的意思就是想让大家知道函数名其实不过是一个地址但是地址只是单纯的地址没有多的含义所以我们需要给地址加上类型这才是有意义的。一个人是没有意义的一个人做的事情才会让这个人的人生有意义。$gcc -o main *.c -lm
$main
call_back(),LINE14,args123最后如果觉得不错大家顺手点个赞转发就是对我最大的鼓励和支持长按识别二维码关注公众号