返回信息流int pthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);
关于该函数的第三个参数的问题---void*(*start_rtn)(void*),
(1)第一个(void *就是红色的那个)void*(*start_rtn)(void*)根据C语言语法规定应该是该函数指针指向的函数其返回值是指针类型吧,但线程执行的那个函数为啥一定要返回个指针类型的东东呢??谁规定的啊??我要非得调用一个返回int类型的函数呢??表示不理解为啥这样写那个参数
(2)再看他最后一个void *,意思应该是我调用的那个函数接受的参数是个指针类型吧。。谁又规定的我调用的函数参数非得传个指针呢??
表示很不理解这个pthread_create函数的第三个参数,我觉着问题应该在于我对C语言语法理解不透彻,还望指点一下
这是一条镜像帖。来源:北邮人论坛 / cpp / #75071同步于 2013/11/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于pthread_create函数的疑问
z843259180
2013/11/6镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
猜猜。。。
void* 是通用的用法吧,这样可以强制转换成任何类型指针。
至于标准一般用指针做参数,可以直接调用 用户空间的参数内容吧。不会出现copy by value,无法修改用户自定义空间的实际参数区域,另外也节省空间(省去复制形参)?
这样第4个参数,就也是void*了,可以指向任意类型变量或者结构体。
另外,void是空的意思,就是没有,所以如果不用指针,又不能用某个特定的类型(需求多样化),更不能用void (代表没有参数了),无法实现这样灵活的传参。
【 在 z843259180 的大作中提到: 】
: int pthread_create(pthread_t*restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);
: 关于该函数的第三个参数的问题---void*(*start_rtn)(void*),
: (1)第一个(void *就是红色的那个)void*(*start_rtn)(void*)根据C语言语法规定应该是该函数指针指向的函数其返回值是指针类型吧,但线程执行的那个函数为啥一定要返回个指针类型的东东呢??谁规定的啊??我要非得调用一个返回int类型的函数呢??表示不理解为啥这样写那个参数
: ...................