关于void *和(void *)和void **的问题

青子实 2016-05-20 04:24:23
就像下面这两个函数定义中的
int pthread_creat(pthread_t *thread, pthread_attr_t *attr, void*(*strat_routine)(void *), void *arg);
中的void *(*start_routine)(void *)是什么意思?
还有下面这个例子
int pthread_join(pthread_t th, void **thread_return);
中的void **thread_return是什么意思?

谢谢
...全文
589 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
青子实 2016-07-05
  • 打赏
  • 举报
回复
引用 3 楼 paschen 的回复:
void *(*start_routine)(void *) 是一个函数指针,指向的函数类型是参数与返回值都为void*的 void **thread_return 就是 void**类型,也就是指向void*的指针的类型
谢谢,明白了~
青子实 2016-07-05
  • 打赏
  • 举报
回复
引用 2 楼 qq423399099 的回复:
你定义了一个函数指针。名字叫 start_routine 。 这个函数的返回值是void *(一个指针) 参数是void *(一个指针) void **thread_return就表示二级指针(指针的指针)
谢谢了 明白了~
冷西瓜 2016-05-22
  • 打赏
  • 举报
回复
paschen 2016-05-21
  • 打赏
  • 举报
回复
void *(*start_routine)(void *) 是一个函数指针,指向的函数类型是参数与返回值都为void*的 void **thread_return 就是 void**类型,也就是指向void*的指针的类型
小灸舞 版主 2016-05-20
  • 打赏
  • 举报
回复
你定义了一个函数指针。名字叫 start_routine 。
这个函数的返回值是void *(一个指针)
参数是void *(一个指针)

void **thread_return就表示二级指针(指针的指针)
赵4老师 2016-05-20
  • 打赏
  • 举报
回复
强制类型转换
const int BLOCK_LINE = 20;//当前地图的行数 const int BLOCK_ROW = 10;//当前地图的列数 class CBlock { public: CBlock(void); ~CBlock(void); private: // 当前方块形状 int m_BlockShape; //下一个方块形状 int m_nextBlockShape; //当前方块状态 int m_BlockState; //等级 int m_BlockLevel; //当前可消行数 int m_BlockCurDelLine; //游戏是否在执行 bool m_blockRunning; //当前方块位置 POINT m_BlockPos[4]; //下个方块位置 POINT m_nextBlockPos[4]; //当前的屏幕状态 //BLOCK_LINE是行数,BLOCK_ROW是列数 int m_Blockmap[BLOCK_LINE][BLOCK_ROW]; public: // 初始化游戏 void BlockInit( void ); private: // 记录方块图形 CBitmap m_bmpBlock[7]; public: //创建一个新的方块出来,这里只给方块形状赋值 void CreateNewBlock(void); private: //这里给方块位置赋值, //shape是形状, pt[]是用来接收方块坐标的(方块形状的排列坐标)数组 //xPos是偏移量,就是方块显示位置和方块显示的框的最左边的差 void MakeNewBlock(int shape, POINT pt[], int xPos); public: //将方块画在对应的DC上 void DrawBlock(CDC* pDC); //方块的下落过程,主要部分 void BlockDropDown(CDC* pDC); private: // 隐藏方块 void HideBlock(CDC* pDC); // 背景图片变量 CBitmap m_bmpBKGND; public: // 画下个方块的框框 void DrawNextBlock( CDC* pDC ); //方块左移 void BlockLeft(CDC* pDC); //方块右移 void BlockRight(CDC* pDC); //方块下移 void BlockFastDown(CDC* pDC); //方块变形 void ChangeState(CDC* pDC); // 消除一行 //pDC是传入的DC //LineNum是消除的行从第几行开始(我这里是最上面为0,最下面为19) //start是 游戏是否是要把消除行以上的都置0,我是用在OnDraw()里,用来重画屏幕的, void DeleteLine(CDC* pDC, int LineNum, bool start); // 游戏是否结束,true=结束了 bool BlockGameOver(void); // 计分板 //del是决定是否是已消一行的 void BlockScore(int del, CDC* pDC); //返回是否升级了,true=升级了 bool BlockLevelUp(void); //返回下落速度 int BlockSpeed(void); };

70,024

社区成员

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

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