[C语言] 帮忙解释一下这条语句是何意?

[复制链接]
 楼主| lib6303c 发表于 2013-8-2 16:05 | 显示全部楼层 |阅读模式
(*(void(*)())User_Run_Addr)();
其中 User_Run_Addr 被定义为unsigned int ,我没这么用过,请大家解释一下,谢谢了!
coody 发表于 2013-8-2 16:20 | 显示全部楼层
函数指针
 楼主| lib6303c 发表于 2013-8-2 16:37 | 显示全部楼层
你的意思是一个整形数据被强制类型转换成一个函数的指针,有点难理解。
joyme 发表于 2013-8-2 16:40 | 显示全部楼层
在这个地址存放了一个子函数,通过指针方式调用函数
ayb_ice 发表于 2013-8-2 16:44 | 显示全部楼层
强制函数指针调用
wml19861107 发表于 2013-9-1 12:39 | 显示全部楼层
这么复杂,一定要这么写吗?
diweo 发表于 2013-9-1 20:28 | 显示全部楼层
(参考《C语言深度解剖》)
第一步:void(*) (),可以明白这是一个函数指针。所指向的函数没有参数,没有返回值。
第二步:( void(*) () )User_Run_Addr,这是将User_Run_Addr 从unsigned int强制转换为函数指针类型。
第三步:( *( void(*) () )User_Run_Addr ),这是取User_Run_Addr 地址开始的一段内存里面的内容,其内容就是保存在首地址为User_Run_Addr 的一段区域内的函数。
第四步:( *( void(*) () )User_Run_Addr ) (),这是函数调用。
-------------------
再来个复杂点的。
(*(char**(*) (char **,char **))User_Run_Addr) ( char **,char **);

评分

参与人数 1威望 +1 收起 理由
一把单刀客 + 1 赞一个!

查看全部评分

南宫云明 发表于 2013-9-1 20:48 | 显示全部楼层
diweo 发表于 2013-9-1 20:28
(参考《C语言深度解剖》)
第一步:void(*) (),可以明白这是一个函数指针。所指向的函数没有参数,没有返 ...

为什么要写得这么复杂,返回得简单点不好吗?

这样写的人多吗?有什么有点阿?
diweo 发表于 2013-9-1 21:15 | 显示全部楼层
南宫云明 发表于 2013-9-1 20:48
为什么要写得这么复杂,返回得简单点不好吗?

这样写的人多吗?有什么有点阿?

理解之后其实并不复杂,
如果嫌长可以用宏定义。

sunhq02 发表于 2013-9-2 14:16 | 显示全部楼层
(*(void(*)())User_Run_Addr)();

在函数指针里面不算复杂的
如果你觉得看起来很晕的话,可以把它拆成一块一块的:
typedef        void(*pfun_T)();        //定义一个函数指针类型
(*(pfun_T)User_Run_Addr)();                //原式就成了这样了

另外一点,在标准C里面,函数指针可以直接作为函数使用而不必加*
所以
((pfun_T)User_Run_Addr)();                //也是合法的

这样看起来就很清爽了, 就是将一个整数转换为函数指针并运行这个函数
w522930954 发表于 2013-9-2 16:50 | 显示全部楼层
解释的很清楚哇。。
zhaotao108 发表于 2013-9-13 10:58 | 显示全部楼层
学习了
ipman 发表于 2013-9-14 20:40 | 显示全部楼层
项目大了就知道威力了,比如你做一个产品,30个按键,每个按键功能对应一个函数,如果将函数指针放到数组里,可以灵活的通过按键index直接对应功能,否则就是无数多个if else if else
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

242

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部