线程池代码中存在一段结构体初始化的设计:

复制代码
/*
    all tasks in the linked list 
    recalled function for task
*/
typedef struct worker
{
    void *(*process) (void *arg); /*recalled function*/
    void *arg;
    struct worker *next;
} CThread_worker;
复制代码

 

看最基本的定义:

int func(int x);   /*声明一个函数*/
int (*p) (int x);  /*定义一个函数指针*/
p = func;          /*将Func函数的首地址赋给指针变量p*/

声明一个函数最为简单,定义一个函数指针则 int (*p) (int x)

*p 代替func, 大体样式一样,int ()()

p 指向 func,函数指针样式。

 void *(*process) (void *arg)

void *arg 作为一个无类型指针参数

void *(*p) 无类型指针的函数,此时需要说明函数指针和指针函数的区别:

指针函数: int *sum(int a, int b), 是一个函数,返回值是一个指针。(简单记忆-返回指针)

函数指针: int sum(int a, int b), int (*p)(int, int) p = sum, p指向函数,sum返回值是一个int类型。(简单记忆-返回函数值)

void *(*process) (void *arg)该为函数指针形式(有一种面向对象思想)