永发信息网

linux c编程中关于ptheread_create 的用法解释

答案:1  悬赏:80  手机版
解决时间 2021-03-27 09:32
linux c编程中关于ptheread_create 的用法解释
最佳答案
只是强制转换返回值类型.
int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,void *(*start_rtn)(void),void *arg)
第三个参数接收一个函数的地址
按普通变量地址应该这样调用
pthread_create(&id1,NULL,(void*)(&mythread),NULL);
注意取地址符&
但是函数比较特殊,
函数名本来就代表了函数的入口地址。
例如下面这段代码:
  #include  
#include  
#include  
 
void test() 

    printf("test
"); 

 
int main(int argc, char *argv[]) 

    printf("%p
",test); 
    printf("%p
",&test); 
}输出结果为:
0x8048414
0x8048414
可见,其实两者是一样的,都指向着这个函数的入口地址。
 
所以可以直接不加&
而前面的(void *)只是函数传参数时的一个强制转换,是关于返回值类型的
追问void *mythread()不是已经把函数定义成返回值为空指针嘛?为什么还要强制转换,而且如果不强制转换的话,还会冒出警告。函数指针作为参数的时候表示一个函数的入口么?既然直接用函数名就能解决,为什么还需要函数指针啊?顺便再问一下,这样理解好像就是在说函数名就是函数指针啊?追答函数指针可以应用于其他地方啊,
比如你定义一个函数指针
void (*pfun)();
这个pfun可以这样赋值指向其他函数,它是个指针变量
pfun=fun();
而函数名相当于个常量,不知道这样理解是否正确,不过大概就是这个意思吧

这里只是把这个函数地址赋值给了pthread_create函数的形参 start_rtn(这是一个函数指针)
相当于 start_rtn = mythread1 或者 start_rtn = &mythread1.

至于为啥有警告 那我就不清楚了,编译器相关的东西
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
桃江县益阳马迹塘镇中心小学地址在哪里啊
许魏洲i will be fine是谁唱的
logo设计过程中如何表现艺术手法
我的目标和规划怎么写六百字左右
怎么判断疑问句开头用DO还是ARE
l辽宁抚顺的老年IC卡现在在什么地方办理
我不理解 "that在表语从句中,任何情况下都不
戒灵为什么不找咕噜和比尔博
STC89C52RC芯片如何烧录程序
怎样不用夹板就能夹直头发?
【易语言】怎么才能点击按钮载入一个新的窗口
谁能坚持五十秒:作弊
5天最多可以减掉多少斤
《剑南诗稿·山园杂咏五首》的意思
h----是什么衣服牌子
推荐资讯
LOL大神们,当今S3版本,刀妹,男刀锋,瑞文
已知运算电路如图所示,试求Uo
谁能列举一些纺织类的外贸专业英语
尤文图斯在电话门事件降入意乙都有谁在艰苦时
82年阳历6月1日出生的人的命运是什么
很多女生觉得不会做饭很自豪,是什么心态
含有生死的词语 多一点
前沿广告地址在什么地方,想过去办事
以下哪位是鼓手A.zim B.vincent C.rojer D.sh
中央八项规定和“四风”的内容是什么?
Win10系统进入阅读纯净模式怎么去掉
片有两个读音分别是什么和什么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?