linux c编程中关于ptheread_create 的用法解释
答案:1 悬赏:80 手机版
解决时间 2021-03-27 09:32
- 提问者网友:战皆罪
- 2021-03-26 14:30
linux c编程中关于ptheread_create 的用法解释
最佳答案
- 五星知识达人网友:人類模型
- 2021-03-26 15:28
只是强制转换返回值类型.
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.
至于为啥有警告 那我就不清楚了,编译器相关的东西
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.
至于为啥有警告 那我就不清楚了,编译器相关的东西
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯