线程池代码中存在一段结构体初始化的设计:
/* 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)该为函数指针形式(有一种面向对象思想)
Life is mess, don't let mess mess us.
浙公网安备 33010602011771号