(void (*)(void *))的作用是什么

macrossdzh 2009-07-28 11:31:35
请教大家一个C指针的问题
sctp_inq_set_th_handler和sctp_endpoint_bh_rcv是两个函数,其原型分别为:
void sctp_inq_set_th_handler(struct sctp_inq *q,void (*callback)(void *), void *arg)

void sctp_endpoint_bh_rcv(struct sctp_endpoint *ep)

在一个函数语句sctp_inq_set_th_handler(&ep->base.inqueue,(void (*)(void *))sctp_endpoint_bh_rcv, ep);中,(void (*)(void *))的作用是什么?感觉不加也没有语法错误吧?
...全文
553 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞天御剑流 2009-07-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 macrossdzh 的回复:]
请教大家一个C指针的问题
sctp_inq_set_th_handler和sctp_endpoint_bh_rcv是两个函数,其原型分别为:
void sctp_inq_set_th_handler(struct sctp_inq *q,void (*callback)(void *), void *arg)

void sctp_endpoint_bh_rcv(struct sctp_endpoint *ep)

在一个函数语句sctp_inq_set_th_handler(&ep->base.inqueue,(void (*)(void *))sctp_endpoint_bh_rcv, ep);中,(void (*)(void *))的作用是什么?感觉不加也没有语法错误吧?

[/Quote]

( void ( * )( void * ) )把sctp_endpoint_bh_rcv强制转换为函数指针类型,此指针类型指向的函数的返回值为void,形参为指向void的指针。
  • 打赏
  • 举报
回复
void (*callback)(void *),
声明函数指针,void *型有利于了类型转换
china0008 2009-07-28
  • 打赏
  • 举报
回复
看到指针很头痛。忍痛学习下。
ies_sweet 2009-07-28
  • 打赏
  • 举报
回复 2
这是一次 强制类型转换

这个类型有些特别,是一个指针

这个指针有些特别,是个指向函数的指针

这个函数有些特别,它返回一个void *型指针,
且这个函数的形参也是个指针(void *型指针)

总之,都是指针惹的祸~
kojie_chen 2009-07-28
  • 打赏
  • 举报
回复
类型转换,学习了
cyldf 2009-07-28
  • 打赏
  • 举报
回复
强制类型转换,就跟CString -> LPCTSTR 一样,CString a=>(LPCTSTR)a,就成LPCTSTR了
ljt3969636 2009-07-28
  • 打赏
  • 举报
回复 3
先单看void (*)(),这是个函数指针类型指向返回值类型为void参数为空的函数
再看void (*)(void *)一样的函数指针类型,指向返回值类型为void,参数类型为void *的函数
pengzhixi 2009-07-28
  • 打赏
  • 举报
回复
void (*)(void *)你先弄清楚这个是什么意思吧
wb_am 2009-07-28
  • 打赏
  • 举报
回复
(void (*)(void *))就用来对sctp_endpoint_bh_rcv进行强制类型转换,不加肯定有warning,错误不一定
tian428 2009-07-28
  • 打赏
  • 举报
回复
强制类型转化
不加会有警告吧 sctp_endpoint_bh_rcv 是 (void (*)(struct sctp_endpoint*))型,而需要的是(void (*)(void *))型
liao05050075 2009-07-28
  • 打赏
  • 举报
回复
(void (*)(void *))sctp_endpoint_bh_rcv是把函数指针sctp_endpoint_bh_rcv转成(void (*)(void *))型

因为void sctp_inq_set_th_handler(struct sctp_inq *q,void (*callback)(void *), void *arg)
它要的第二个参数是(void (*)(void *))的。
如果不加的话,可能会报错。就算不报错,也会出warning的,因为编译器给你隐式转换了
The_facE 2009-07-28
  • 打赏
  • 举报
回复
类型转换而已。
飞天御剑流 2009-07-28
  • 打赏
  • 举报
回复 1
void (*callback)(void *)中,callback是一个( void(*) (void *) )类型的函数指针变量,
----------------------------------------------------------------------------
这里的callback不是个标识符,它表示这个函数指针类型指向的函数是一个回调函数,这里省略了标识符,因为

是作为函数原型声明中的形参出现的




而sctp_endpoint_bh_rcv是( void(*)(struct sctp_endpoint *))类型
-----------------------------------------------------------------
sctp_endpoint_bh_rcv是 void (*)( void * )类型,不是void(*)(struct sctp_endpoint *)类型
飞天御剑流 2009-07-28
  • 打赏
  • 举报
回复
你的理解还是错了
飞天御剑流 2009-07-28
  • 打赏
  • 举报
回复
等等
macrossdzh 2009-07-28
  • 打赏
  • 举报
回复
谢谢以上各位的解答,现在明白了:
void (*callback)(void *)中,callback是一个( void(*) (void *) )类型的函数指针变量,
而sctp_endpoint_bh_rcv是( void(*)(struct sctp_endpoint *))类型

结帖啦!
zhanghuayi_xiyou 2009-07-28
  • 打赏
  • 举报
回复
简单的强制类型转换
内容概要:本文围绕基于蜣螂优化算法(DBO)的无线传感器网络(WSN)覆盖优化问题展开研究,提出了一种创新性的智能优化解决方案,并提供了完整的Matlab代码实现。研究首先分析了传统WSN覆盖优化中存在的覆盖率低、能耗不均等问题,随后引入蜣螂优化算法这一新型群体智能算法,通过模拟蜣螂的生物行为机制,构建了适用于传感器节点部署优化的数学模型。文中详细阐述了算法的设计思路、实现步骤及其在提高网络覆盖率、延长网络生命周期方面的有效性,同时通过仿真实验与其他主流优化算法进行了对比,验证了所提方法的优越性。; 适合人群:具备一定优化算法基础和Matlab编程能力,从事通信工程、物联网、智能优化等相关领域的研究生及科研人员。; 使用场景及目标:①解决无线传感器网络中节点部署不合理导致的覆盖盲区问题;②提升网络整体覆盖性能与资源利用效率;③为智能优化算法在实际工程中的应用提供可复现的研究案例和技术参考。; 阅读建议:建议读者结合文中的Matlab代码进行实践操作,重点关注算法参数设置、适应度函数设计及仿真结果分析部分,同时可尝试将该算法迁移至路径规划、资源调度等其他优化场景中进行拓展研究。
已经博主授权,源码转载自 https://pan.quark.cn/s/a4b39357ea24 在信息技术领域,特别是软件编程行业,微软公司推出的集成开发环境(IDE)Visual Studio,凭借其卓越的功能和广泛的适用范围,成为了众多程序员的常用工具。不过,在实际操作期间,用户可能会遭遇各种挑战,其中一种较为普遍的挑战是“Visual Studio遭遇了异常情况,这或许与某个附加组件有关”。本文将详细研究这一现象的成因、潜在后果以及最终的应对措施。 ### 原因剖析 Visual Studio通过支持多种插件和附加组件来扩展其功能,这些组件通常由第三方开发者设计,旨在为用户提供更多个性化和专业化的工具。然而,这些插件的质量良莠不齐,部分可能未经过充分的测试或与特定版本的Visual Studio存在兼容性难题,从而在执行时引发异常。异常的出现可能源于以下几个因素: 1. **代码缺陷**:若附加组件中的代码存在逻辑问题或资源管理不当,就可能导致运行时异常。 2. **资源竞争**:多个插件同时占用相同的资源(例如内存、文件句柄等),可能会产生资源冲突,进而触发异常。 3. **依赖不匹配**:插件可能需要特定版本的库或框架,如果系统中安装的版本不一致,也可能导致异常。 4. **安全隐患**:部分插件可能存在安全漏洞,一旦被恶意利用,可能会导致更严重的问题,包括但不限于异常崩溃。 ### 后果分析 当Visual Studio遇到由附加组件引发的异常时,不仅会中断当前的工作进程,降低开发效能,还可能带来以下潜在风险: 1. **数据遗失**:若异常发生在保存操作之前,可能会导致未保存的工作内容遗失。 2. **稳定性减弱**:频繁的异常会导致Visual Stud...

70,038

社区成员

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

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