我开始研究这个C项目,我发现这个奇怪的代码,我从未见过任何类似的东西!
cas_send_browser_event_cb(cas_browser_event_t ev, void* priv)
{
Function_code ...
}
正如您所看到的,此函数有两个参数,第一个是enum
,第二个是void *
。
我寻找这个函数的调用,我发现了这个:
casware_register_cb_uievent (cas_send_browser_event_cb , NULL);
如您所见,它作为参数传递给另一个没有参数的函数,甚至没有()
。我无法理解这段代码。我错过了什么吗? (它与某种程度上与事件编程有关)。
答案 0 :(得分:4)
casware_register_cb_uievent (cas_send_browser_event_cb , NULL);
传递指向函数casware_register_cb_uievent
要进一步了解以下代码。
#include<stdio.h>
void hello()
{
printf("hello world");
}
void world(void (*fun)())
{
fun();
}
main()
{
world(hello);
}
此处函数world
类似于函数casware_register_cb_uievent
void world(void (*fun)())
函数world
接受指向fun
现在当函数hello
(类似于函数cas_send_browser_event_cb
)作为输入给出时,它类似于将指针指定为
fun = hello
函数调用
fun()
中的{p> world
调用它指向的函数hello
产生输出
hello world
当函数声明为
时 void (*fun)();
创建一个函数指针。
可以使用要指向的另一个函数的名称来指定函数指针
fun = hello;
现在在调用指针fun
指向函数时,hello
是实习生,名为
答案 1 :(得分:1)
通过了function pointer,可能是typedef。这意味着正在传递case_send_browser_event
的位置,以便它可以改变casweare_register_cb_uievent
函数的行为。
这种传递在算法中非常有用,在这些算法中,您希望在运行中针对不同的事物进行最大化,因此更改用于从最小化到最大化进行比较的布尔函数将为a提供相反的行为。排序算法。