C高手们!帮我看看这句代码...

cai_bird 2005-03-14 05:29:24
C语言代码:其中TD是指向一个struct的指针
void (*work)(void),*para;

if(TD->work)
((void(*)(void *))TD->work)(TD->para);


求教:
void (*work)(void)和((void(*)(void *))TD->work)分别是什么意思?
...全文
148 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cai_bird 2005-03-15
  • 打赏
  • 举报
回复
谢谢各位!接帖
krw 2005-03-14
  • 打赏
  • 举报
回复
上面说得对
可惜啊
jacksting 2005-03-14
  • 打赏
  • 举报
回复
TD的work函数是void *类型的,不为空,就把work转换一下,现在它指向一个没有参数和返回值的函数了。
llmsn 2005-03-14
  • 打赏
  • 举报
回复
晚了呵呵.
yxxng 2005-03-14
  • 打赏
  • 举报
回复
我也晚了,楼上的都是正解!
sankt 2005-03-14
  • 打赏
  • 举报
回复
up
Salam2001 2005-03-14
  • 打赏
  • 举报
回复
晚了...
loverP 2005-03-14
  • 打赏
  • 举报
回复
void (*work)(void)声明了一个指针,它可以指向这样一个函数:void func(void)
顺便说一下,这个指针的名字是work,它的类型是void (*)(void)

((void(*)(void *))是一个转型,类比一下(int)a是把a转换为int,这个东西可以把它后面的TD->work转型为一个指向 void func(void *)的函数指针,这时,((void(*)(void*))TD->work)可以认为就是一个函数,类比func(...)是以...为参数调用func,在上面转换结果所表示的函数指针后面加(TD->para)表示以TD->para为参数去调用那个指针所指向的函数。

这样将可能还不太清楚。不过这正是C语言的魅力所在。应该把这个帖子推荐给那些问“我学完C语言了,该学什么呀?”的人看……
cenlmmx 2005-03-14
  • 打赏
  • 举报
回复
((void(*)(void *))TD->work)
============================
為強制類型轉換把TD->work轉換成指向一個沒有參數和返回值的指針。
==就是把TD->work指向的地址作为函数指针来使用,TD->para为函数参数
相当于
work=(void *))TD->work;

zhousqy 2005-03-14
  • 打赏
  • 举报
回复
((void(*)(void *))TD->work)
============================
為強制類型轉換把TD->work轉換成指向一個沒有參數和返回值的函數的指針。
zhousqy 2005-03-14
  • 打赏
  • 举报
回复
typedef void (*work)(void)
================
說明work是一個函數指針,這個函數沒有參數和返回值。

((void(*)(void *))TD->work)
============================
為強制類型轉換把TD->work轉換成指向一個沒有參數和返回值的指針。

69,379

社区成员

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

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