(void * (*)(void *)) pthread_manager

aiwoziji13 2010-09-24 04:26:36
看到一段程序:pthread_create(&pthread[PTHREAD] , NULL, (void * (*)(void *)) pthread_manager, NULL) !=0)

请问(void * (*)(void *))怎么理解?
...全文
204 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
aiwoziji13 2010-09-27
  • 打赏
  • 举报
回复
哦, 谢谢您的回答

[Quote=引用 19 楼 mymtom 的回复:]
但是会有警告的。

引用 17 楼 aiwoziji13 的回复:

看了一下void说明:任何类型的指针都可以转换为void *类型, 并且在将它转换回原来的类型时不会丢失信息

那如果pthread_manager定义为 int * pthread_manager(int *arg)
pthread_create不加类型转换是否也可以


引用 8 楼 mymtom 的回复……
[/Quote]
mymtom 2010-09-26
  • 打赏
  • 举报
回复
但是会有警告的。
[Quote=引用 17 楼 aiwoziji13 的回复:]

看了一下void说明:任何类型的指针都可以转换为void *类型, 并且在将它转换回原来的类型时不会丢失信息

那如果pthread_manager定义为 int * pthread_manager(int *arg)
pthread_create不加类型转换是否也可以


引用 8 楼 mymtom 的回复:
(void * (*)(void *))是强制类型转换。
这……
[/Quote]
旭子 2010-09-25
  • 打赏
  • 举报
回复


void *(*func_ptr_array[100])(void *);//函数指针数组
void *(*(*func_ptr_array_ptr)[100])(void *);//函数指针数组指针
aiwoziji13 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 goodluckyxl 的回复:]
把括号里面的*用 f来代替看下就得到原型了
[/Quote]
就是不明白 为什么可以吧*换成f来看啊?
aiwoziji13 2010-09-25
  • 打赏
  • 举报
回复
看了一下void说明:任何类型的指针都可以转换为void *类型, 并且在将它转换回原来的类型时不会丢失信息

那如果pthread_manager定义为 int * pthread_manager(int *arg)
pthread_create不加类型转换是否也可以


[Quote=引用 8 楼 mymtom 的回复:]
(void * (*)(void *))是强制类型转换。
这段程序写的不好。
除非没有其他办法,不要用强制类型转换。
pthread_create原型如下。
http://www.opengroup.org/onlinepubs/000095399/functions/pthread_create.html
#include <pthread.h>

int pthread_crea……
[/Quote]
aiwoziji13 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 shexinwei 的回复:]
C/C++ code

(void * (*f)(void *)) //表示f是一个指向返回值void *,参数为void *的函数指针
(void * (*)(void *)) //去掉了标识符f,表示的是f的类型

int *a = NULL; //表示a是一个整形指针
int * //去掉标识符a后表示的……
[/Quote]

那我可以把void * (*)(void *)) pthread_manager理解成void * (*pthread_manager)(void *))

但是原型是void * pthread_manager(void *arg) 两者相比相差pthread_manager前面的*

为什么可以这样 是和函数指针一个道理么
比如(*)fp() 和 fp()值一个效果?
xiguaqiezi 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 eclipse_2 的回复:]

是一种类型
void* (*)(void *) -- 该类型是一个函数指针 指向返回类型为void * 参数为 void *的函数
[/Quote]正确
aiwoziji13 2010-09-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 dengxu11 的回复:]
C/C++ code

void *(*func_ptr_array[100])(void *);//函数指针数组
void *(*(*func_ptr_array_ptr)[100])(void *);//函数指针数组指针
[/Quote]

void *(*(*func_ptr_array_ptr)[100])(void *);//函数指针数组指针
请问这个怎么分析的?
aiwoziji13 2010-09-25
  • 打赏
  • 举报
回复
请问 (void * (*)(void *)) 中的(*)是否可以理解是函数指针

我困惑的是既然原型是 void * pthread_manager(void *arg)
那为什么强制转换中要有(*) 如果换成(void * ( )(void *))为什么不对


[Quote=引用 8 楼 mymtom 的回复:]
(void * (*)(void *))是强制类型转换。
这段程序写的不好。
除非没有其他办法,不要用强制类型转换。
pthread_create原型如下。
http://www.opengroup.org/onlinepubs/000095399/functions/pthread_create.html
#include <pthread.h>

int pthread_crea……
[/Quote]
  • 打赏
  • 举报
回复
楼上几位都说完了,我无话可说!
saishow 2010-09-24
  • 打赏
  • 举报
回复
路过,学习一下!!!
xxxholic110 2010-09-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 eclipse_2 的回复:]
是一种类型
void* (*)(void *) -- 该类型是一个函数指针 指向返回类型为void * 参数为 void *的函数
[/Quote]


正确!
mymtom 2010-09-24
  • 打赏
  • 举报
回复
(void * (*)(void *))是强制类型转换。
这段程序写的不好。
除非没有其他办法,不要用强制类型转换。
pthread_create原型如下。
http://www.opengroup.org/onlinepubs/000095399/functions/pthread_create.html
#include <pthread.h>

int pthread_create(pthread_t *restrict thread,
const pthread_attr_t *restrict attr,
void *(*start_routine)(void*), void *restrict arg);

在这个例子里, 用(void * (*)(void *)) pthread_manager的原因是pthread_create的第三个参数的类型应该是
(void * (*)(void *)),也就是一个参数和返回值都是void *的函数指针。
其实只要pthread_manager的定义如下,根本不需要强制类型转换。
void * pthread_manager(void *arg)
{
/*
...
*/
return NULL;
}
[Quote=引用楼主 aiwoziji13 的回复:]
看到一段程序:pthread_create(&pthread[PTHREAD] , NULL, (void * (*)(void *)) pthread_manager, NULL) !=0)

请问(void * (*)(void *))怎么理解?
[/Quote]
riusksk 2010-09-24
  • 打赏
  • 举报
回复
路过,学习一下!!!
shexinwei 2010-09-24
  • 打赏
  • 举报
回复

(void * (*f)(void *)) //表示f是一个指向返回值void *,参数为void *的函数指针
(void * (*)(void *)) //去掉了标识符f,表示的是f的类型

int *a = NULL; //表示a是一个整形指针
int * //去掉标识符a后表示的是变量a的类型
dingshaofengbinbin 2010-09-24
  • 打赏
  • 举报
回复
是一个参数类型为void*,返回类型为void*函数指针。
goodluckyxl 2010-09-24
  • 打赏
  • 举报
回复
把括号里面的*用 f来代替看下就得到原型了
pengzhixi 2010-09-24
  • 打赏
  • 举报
回复
void * (*)(void *)//是一个函数指针,参数类型为void*指针,返回类型为void*指针。
小魔菇 2010-09-24
  • 打赏
  • 举报
回复
是一种类型
void* (*)(void *) -- 该类型是一个函数指针 指向返回类型为void * 参数为 void *的函数
isfrog 2010-09-24
  • 打赏
  • 举报
回复
关注ing

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧