打印

请教大家几个函数指针数组的问题。

[复制链接]
2330|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hxdjb|  楼主 | 2011-7-22 11:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void(*code task[])()={work1,work2,work3};     1:这里一定要用关键字code吗? work1, work2,work3 必须是函数名吗?

void run(void(*pwork)())        2:这是不是一个指针函数?
{
   (*pwork)();
}

void main(void)   
{
   run(work[2]) ; 3:调用指针函数,这里的函数work[2]是作为实参,是什么用处?
}

相关帖子

沙发
ayb_ice| | 2011-7-22 11:45 | 只看该作者
1: 放大CODE区节省RAM,但没有说必须,既然是函数指针当然必须是函数钟了,除非强制转换
2: 是
3: 典型的画蛇添足,多此一举,其实就是执行work2函数

使用特权

评论回复
板凳
xiaotann| | 2011-7-22 11:46 | 只看该作者
指针函数是什么

使用特权

评论回复
地板
liang7143| | 2011-7-22 11:47 | 只看该作者
1,关键字code不是必须,如果你还想在其他地方对这个指针函数数组 赋值,就不应该用code 如果是固定不变 就可以用code 或者const。work1, work2,work3 必须是函数名,但是也可以违规操作,进行强制转换
2,是的
3,可以进行一些散转,回调等的功能。
   比如有一按键扫描程序 key = GetKey();
   key值为0,1,2 ,0为没有按键,1,2为二个不同的按键
  那么按键处理程序可以这样
  run(work[GetKey()]);

以上是我的个人理解,欢迎拍砖~~

使用特权

评论回复
5
yewuyi| | 2011-7-22 11:49 | 只看该作者
指针难倒很多人。

使用特权

评论回复
6
liang7143| | 2011-7-22 11:50 | 只看该作者
1: 放大CODE区节省RAM,但没有说必须,既然是函数指针当然必须是函数钟了,除非强制转换
2: 是
3: 典型的画蛇添足,多此一举,其实就是执行work2函数
ayb_ice 发表于 2011-7-22 11:45

第三点 执行的是 work3函数 C下标是从0开始的
O(∩_∩)O哈哈~ 您也有手误的时候

使用特权

评论回复
7
李娜| | 2011-7-22 12:43 | 只看该作者
4楼
run(work[GetKey()]);


笔误?

是不是应该: run(task[GetKey()]);


使用特权

评论回复
8
原野之狼| | 2011-7-22 12:48 | 只看该作者
1: 放大CODE区节省RAM,但没有说必须,既然是函数指针当然必须是函数钟了,除非强制转换
2: 是
3: 典型的画蛇添足,多此一举,其实就是执行work2函数
ayb_ice 发表于 2011-7-22 11:45

从给出的代码片段来看,确实没有发现第3点有什么好处。

使用特权

评论回复
9
ya_song| | 2011-7-22 13:51 | 只看该作者
O哈哈~ 您也有手误的时

使用特权

评论回复
10
ccxlslr| | 2011-7-22 13:54 | 只看该作者
没看到work是什么东西,至于work[2]与work2好像没联系吧.

不知道是写错了,还是程序不全!

使用特权

评论回复
11
lixiaoxu2meng| | 2011-7-22 14:57 | 只看该作者
同楼上  run(work[2]) ;不懂
请高手指点

使用特权

评论回复
12
lixiaoxu2meng| | 2011-7-22 15:01 | 只看该作者
run(task[2]) ?
我是没看懂
看上面高手都没提啊

使用特权

评论回复
13
原野之狼| | 2011-7-22 16:23 | 只看该作者
task是一个数组,元素类型是函数指针。
run是一个函数,形参为函数指针,函数执行的效果就是通过这个函数指针来调用一个函数。
调用run时,把task[2]作为参数传入,因此最后结果就是运行了work3函数。

使用特权

评论回复
14
lxyppc| | 2011-7-22 16:27 | 只看该作者
改一下风格,意思没变

typedef void(*pfn_work_t)();
pfn_work_t code task[]={work1,work2,work3};     1:这里一定要用关键字code吗? work1, work2,work3 必须是函数名吗?

void run(pfn_work_t pwork)        2:这是不是一个指针函数?
{
   (*pwork)();
}

void main(void)   
{
   run(work[2]) ; 3:调用指针函数,这里的函数work[2]是作为实参,是什么用处?
}

使用特权

评论回复
15
mohanwei| | 2011-7-22 17:01 | 只看该作者
看文中意思“run(work[2]) ;”应该是“run(task[2]);”吧?编译都不过的代码还是别发了,如果工作能严谨点一般也不需要发帖提问……

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
sxhhhjicbb + 1
16
729144646| | 2011-7-22 23:39 | 只看该作者
恩恩

使用特权

评论回复
17
bnyuli| | 2011-7-23 11:40 | 只看该作者
代码发BBS不好看?你需要它

使用特权

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

本版积分规则

131

主题

242

帖子

2

粉丝