指针,函数指针,函数指针指向的函数的参数!!!

[复制链接]
 楼主| luocolor 发表于 2007-10-18 10:17 | 显示全部楼层 |阅读模式
怎样传递一个参数给指向函数的指针呢?<br />首先有:<br />void&nbsp;(*InterruptHandlers[MAXHNDLRS])(void)={NULL,};<br /><br />然后有:<br />void&nbsp;SetIsrInterrupt(INT32S&nbsp;vector,&nbsp;void&nbsp;(*handler)(void&nbsp;*data),&nbsp;void&nbsp;*data,INT32S&nbsp;ExInt)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;。。。。。<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(vector&gt=MAXHNDLRS&nbsp;||&nbsp;vector&lt0)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;InterruptHandlers[vector]&nbsp;=&nbsp;handler;//?how<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;。。。。。<br />}<br />现在要想实现的是SetIsrInterrupt的参数data可以传递给handler函数使用。即在另外的地方,可以调用InterruptHandlers[vector](*data)<br />在?how的地方怎样更改下呢?我想不到,也没有见过。dx指导啊!!
dld2 发表于 2007-10-18 10:31 | 显示全部楼层

是不是这个意思

typedef&nbsp;struct<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;(*InterruptHandlers)(void&nbsp;*data);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;*dat;<br />}T_HANDLER;<br />T_HANDLER&nbsp;hdl[MAXHNDLRS];
computer00 发表于 2007-10-18 10:50 | 显示全部楼层

你的函数本来定义的就是没有参数啊,怎么传递?

void&nbsp;(*InterruptHandlers[MAXHNDLRS])(void)??
 楼主| luocolor 发表于 2007-10-18 10:52 | 显示全部楼层

o,不好意思!

写快了,<br />void&nbsp;(*InterruptHandlers[MAXHNDLRS])(void&nbsp;*data)={NULL,};
computer00 发表于 2007-10-18 11:18 | 显示全部楼层

必须要有一个地方保存这个值,可以像2楼那样,建立一个结

set时将data参数保存在结构体内,调用时将值取出来。
 楼主| luocolor 发表于 2007-10-18 11:29 | 显示全部楼层

i see

  
 楼主| luocolor 发表于 2007-10-18 12:02 | 显示全部楼层

下面是我写的函数,功能是实现了。

多谢两位。<br /><br />帮我看看有没有内存方面及其他的问题啊!我就怕这个<br /><br />typedef&nbsp;struct&nbsp;t_hand<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;(*InterruptHandlers)(void&nbsp;*data);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;**dat;<br />}T_HANDLER;<br />T_HANDLER&nbsp;*hdl[10];&nbsp;<br /><br />void&nbsp;counter(void&nbsp;*data){<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;%s
&quot;,(char*)data);<br />}<br />void&nbsp;install(int&nbsp;i,void&nbsp;(*handler)(void&nbsp;*data),&nbsp;void&nbsp;**data){<br />&nbsp;&nbsp;&nbsp;&nbsp;T_HANDLER&nbsp;*test&nbsp;=&nbsp;(struct&nbsp;t_hand*)malloc(sizeof(struct&nbsp;t_hand));<br />&nbsp;&nbsp;&nbsp;&nbsp;test-&gtInterruptHandlers&nbsp;=&nbsp;handler;<br />&nbsp;&nbsp;&nbsp;&nbsp;test-&gtdat&nbsp;=&nbsp;data;<br />&nbsp;&nbsp;&nbsp;&nbsp;hdl&nbsp;=&nbsp;test;<br />}<br /><br />int&nbsp;main(int&nbsp;argc,&nbsp;char*&nbsp;argv[])<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;*p&nbsp;=&nbsp;(char&nbsp;*)malloc(10);<br />&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;&quot;111&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;**p1&nbsp;=&nbsp;(void&nbsp;**)&p;<br />&nbsp;&nbsp;&nbsp;&nbsp;install(1,counter,p1);<br />&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;&quot;2222&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;install&nbsp;ok
&quot;);<br />&nbsp;&nbsp;&nbsp;&nbsp;hdl[1]-&gtInterruptHandlers(*(hdl[1]-&gtdat));<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

105

帖子

0

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

40

主题

105

帖子

0

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