一个函数只能做两件事情:被调用和返回其地址。

函数指针就是利用了返回其地址的特性。

一个典型的用法如下。

void error(string str)
{
	cout <<str<<endl;
}

void (*efct)(string);

int _tmain(int argc, _TCHAR* argv[])
{
 	efct = error;
	efct("erro");
}

恩,不过如此。

2. 个typedef 结合使用

typedef 返回类型(*新类型)(参数)

3.nginx内存池中的ngx_pool_cleanup_t

nginx中定义了这样一个清理函数

void *data);
struct ngx_pool_cleanup_s {
    ngx_pool_cleanup_pt   handler;
    void                 *data;
    ngx_pool_cleanup_t   *next;
};
看一下它是怎么清理的:
ngx_pool_cleanup_t*    c;

for (c = pool->cleanup; c; c = c->next) {
        if (c->handler) {
            c->handler(c->data);
        }
    }

哇,太经典了,一个结构体中不仅保存着数据,而且保存了这些数据的清理函数,而这些清理函数是

作为结构体一部分的,当需要摧毁整个内存池的时候,直接调用这个结构体保存的清理函数,简直

用得太巧妙了。

 

 

相关文章: