本文主要是介绍指针函数、函数指针、回调函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近在看nginx方面的知识,在看到nginx块的时候,在nginx模块这个结构体中有7个函数指针。因为最近一年都在做java C语言的知识都没怎么用,今天既然遇到了,那么久查查资料再理解一下吧。
1、指针函数是指带指针的函数,即本质是一个函数。函数返回类型是某一类型的指针
类型标识符 *函数名(参数表)
float *func(x,y);
首先它是一个函数,只不过这个函数的返回值是一个地址值。函数返回值必须用同类型的指针变量来接受,也就是说,指针函数一定有函数返回值,而且,在主调函数中,函数返回值必须赋给同类型的指针变量。
float *fun();
float *m;
m= fun();
注意指针函数与函数指针表示方法的不同,千万不要混淆。最简单的辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。
2、函数指针是指向函数的指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数,即本质是一个指针变量。
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
3、回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
例如nginx中nginx模块这个结构体中
ngx_init_t (*init_module)(ngx_cycle_t *cycle);
这个回调方法在初始化所有模块时被调用。在master/worker 模式下 这个阶段将在启动worker子进程之前完成
这篇关于指针函数、函数指针、回调函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!