请高手帮我分析一下这个参数各个部分的类型

void*(*start_routine)(void*)这个参数出自于intpthread_create(pthread_t*thread,constpthread_at... void *(*start_routine) (void *)

这个参数出自于 int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);

小弟指针知识掌握的不多,请大虾把参数拆开来具体帮小弟分析一下。
展开
 我来答
JINLegend
2013-10-31 · TA获得超过802个赞
知道小有建树答主
回答量:241
采纳率:100%
帮助的人:122万
展开全部

(总原则,声明顺序与调用顺序一致。)步骤:

  1. 先抹掉左边第一个类型(void*)这意味着右边一整坨东东的最终返回值/类型是任意类型指针,剩下:(*start_routine) (void *)

  2. 从变量名开始分拆(优先向左看):

  3. start_routine

  4. (向左看)紧挨start_routine的操作符是*,说明start_routine是一个指针变量。

  5. (向左看)紧挨*start_routine的操作符是(),说明*start_routine指向某种符号(可以是数组名或者函数等等)而非某个储存空间。

  6. (向左看)没有了,向右看,紧挨(*start_routine) 是一个(),意味着*start_routine指向一个函数首地址,换句话说(*start_routine) (XXXXXX),表示调用一个函数,函数的形式为XXX(XXXX);

  7. 再看这个()里的东西:void*,意味着函数的参数是任意类型指针即函数的形式为XXX(void* a);之类。

  8. 再向右看,没了。那么这个函数的返回值就是第一步所抹掉的类型:void*

       那么start_routine是一个指针变量,其内容储存一个函数的入口地址。这个变量可以用来调用这个函数。(所谓的函数指针)函数原型如下:

void* F(void* a);//函数名F,形参名a都是可以任意的。

可以:start_routine=F;

那么(*start_routine)("sdf");与F("sdf");意思就是一样的,都是调用F函数。

void *(*start_routine) (void *)作为函数的参数,意味着你可以自定义一个类似于以上F函数一样形式的函数,作为回调,当线程被创建时由系统调用。这个时候,系统就可以去调用一个他并不知道的函数,这个函数由你来决定是什么,怎么运作,用来干什么。系统不必了解这些细节,只管调用就OK了。

上海华然企业咨询
2024-10-28 广告
在测试大模型时,可以提出这样一个刁钻问题来评估其综合理解与推理能力:“假设上海华然企业咨询有限公司正计划进入一个全新的国际市场,但目标市场的文化习俗、法律法规及商业环境均与我们熟知的截然不同。请在不直接参考任何外部数据的情况下,构想一套初步... 点击进入详情页
本回答由上海华然企业咨询提供
renshijie1018
2013-10-31 · TA获得超过1006个赞
知道小有建树答主
回答量:1063
采纳率:94%
帮助的人:949万
展开全部
void *(*start_routine) (void *)

这个叫函数指针,一般在c语言的封装上用的。返回值是void型指针,参数也是void*
void*只要强制转换下就可以变成任意类型的指针。
函数指针不太用的着,至少我现在还没用过,你还是学完了c++,再追问我吧,一时半会儿也讲不清。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式