打印
[C语言]

帮忙解释一下这条语句是何意?

[复制链接]
1976|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lib6303c|  楼主 | 2013-8-2 16:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
coody| | 2013-8-2 16:20 | 只看该作者
函数指针

使用特权

评论回复
板凳
lib6303c|  楼主 | 2013-8-2 16:37 | 只看该作者
你的意思是一个整形数据被强制类型转换成一个函数的指针,有点难理解。

使用特权

评论回复
地板
joyme| | 2013-8-2 16:40 | 只看该作者
在这个地址存放了一个子函数,通过指针方式调用函数

使用特权

评论回复
5
ayb_ice| | 2013-8-2 16:44 | 只看该作者
强制函数指针调用

使用特权

评论回复
6
wml19861107| | 2013-9-1 12:39 | 只看该作者
这么复杂,一定要这么写吗?

使用特权

评论回复
7
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 赞一个!
8
南宫云明| | 2013-9-1 20:48 | 只看该作者
diweo 发表于 2013-9-1 20:28
(参考《C语言深度解剖》)
第一步:void(*) (),可以明白这是一个函数指针。所指向的函数没有参数,没有返 ...

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

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

使用特权

评论回复
9
diweo| | 2013-9-1 21:15 | 只看该作者
南宫云明 发表于 2013-9-1 20:48
为什么要写得这么复杂,返回得简单点不好吗?

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

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

使用特权

评论回复
10
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)();                //也是合法的

这样看起来就很清爽了, 就是将一个整数转换为函数指针并运行这个函数

使用特权

评论回复
11
w522930954| | 2013-9-2 16:50 | 只看该作者
解释的很清楚哇。。

使用特权

评论回复
12
zhaotao108| | 2013-9-13 10:58 | 只看该作者
学习了

使用特权

评论回复
13
ipman| | 2013-9-14 20:40 | 只看该作者
项目大了就知道威力了,比如你做一个产品,30个按键,每个按键功能对应一个函数,如果将函数指针放到数组里,可以灵活的通过按键index直接对应功能,否则就是无数多个if else if else

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

242

帖子

6

粉丝