线程池代码中存在一段结构体初始化的设计:
/* 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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了