高手的程序,看不懂,大家帮忙看看。

[复制链接]
9611|12
 楼主| lyf9908 发表于 2011-1-2 21:30 | 显示全部楼层 |阅读模式
最近看一个资深工程师写的代码,如下几行

1:  typedef void (*fptr)();    /* function pointer */
2: fptr IRQ_HandlerTable[19]; /* Interrupt Handler Table */
3: irqNum = inpw(AIC_ISNR);  /* read the interrupt source number */
4: (*IRQ_HandlerTable[irqNum])();

  这第一行这样作类型定义有什么作用?
   这最后一行到底在干啥?
  着实看不懂啊,请高手帮忙解析下,谢谢!
eastzsp 发表于 2011-2-7 17:30 | 显示全部楼层
第一行是定义函数指针的原型。
最后一行是从函数指针数组中取得irqNum位置的函数执行。
建议你看看C语言函数指针的定义和调用方法。
zwj19861114 发表于 2011-2-19 16:37 | 显示全部楼层
一行都没看懂:lol
satellite999 发表于 2011-2-21 17:05 | 显示全部楼层
对函数进行调用
accessory2008 发表于 2011-3-1 02:10 | 显示全部楼层
RE 2 楼
walnutcy 发表于 2011-3-2 09:47 | 显示全部楼层
仔细看下C语言吧,或者看下开源代码,一般都有函数指针的高级应用
SLEET1986 发表于 2011-3-19 09:06 | 显示全部楼层
函数指针--第一行定义函数指针类型,第二行定义了一组函数指针,最后一行执行函数指针。
hgjinwei 发表于 2011-3-20 11:14 | 显示全部楼层
这人和我差不多,不懂英语,却死要用英语注释;

1: typedef void (*fptr)(void);   /* 定义一个中断响应函数指针类型 */
2: fptr IRQ_HandlerTable[19]; /* 中断服务例程函数表,用于存放中断服务例程入口地址,实际就是一个矢量表 */
3: irqNum = inpw(AIC_ISNR);  /* 获得中断例程号(PS,这个irqNum 如果改为irq_id 或许更恰当点) */
4: (*IRQ_HandlerTable[irqNum])();  /* 执行中断服务例程,响应中断 */
chjmacong 发表于 2011-9-9 13:41 | 显示全部楼层
楼上高手!
学习了!
tangzzbb 发表于 2011-9-22 18:22 | 显示全部楼层
呵呵,看来很多人只知道数据指针,不常用函数指针啊。
aaron96031 发表于 2011-9-25 14:55 | 显示全部楼层
强人 很多, 解释得很透
mcu_electron 发表于 2011-9-30 12:40 | 显示全部楼层
学习!
genefang 发表于 2011-10-4 12:42 | 显示全部楼层
2l,8l正解
您需要登录后才可以回帖 登录 | 注册

本版积分规则

133

主题

176

帖子

0

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