Chinaunix

标题: 使用函数指针调用需要参数的函数,为何可以不带参数? [打印本页]

作者: dynamic516    时间: 2007-12-10 16:25
标题: 使用函数指针调用需要参数的函数,为何可以不带参数?
void setHandler(int index)
{
    g_cntx->curItem = (int)index;

}

void RegisterHandler(void (*f)(int item))
{    handler1=f;
    handler2=f;
    handler3=f;
}
RegisterHandler(setHandler);


[ 本帖最后由 dynamic516 于 2007-12-10 16:26 编辑 ]
作者: CU黑社会大当家    时间: 2007-12-10 16:37
那不过是一个函数地址而已.
作者: net_robber    时间: 2007-12-10 17:04
指针就是指针。

拿它来做什么,怎么做,是你的事了

函数指针的参数,在某些情况下(比如,有时候,有的编译器,有的操作,如赋值),可以对等号右边的函数原型进行检查(比如参数个数)
作者: net_robber    时间: 2007-12-10 17:05
当然,我强调了,某些情况下

不要依赖这个,因为C不是Java
作者: dynamic516    时间: 2007-12-10 21:28
我是在读其他人的程序,发现setHandler()这个函数的参数一直没有值传入,即使使用地址访问,没有参数这个函数也应该不能正常编译或运行啊

迷糊了
作者: enter_159    时间: 2007-12-11 10:02
那就是没有道理的规定,C比较灵活,有的时候很个性,普遍的规律不存在
作者: dynamic516    时间: 2007-12-11 11:20
各位大虾是否能指点下
void setHandler(int index)
{
    g_cntx->curItem = (int)index;

}
不给这个函数传参数的话,g_cntx->curItem 是多少啊
是随机的内存值还是默认为什么值哦
作者: oyd_admin    时间: 2007-12-11 13:55
楼主你先把代码找全吧?
它在哪调用这个函数没传参数呢?
RegisterHandler(setHandler) 并非调用setHandler好吧?
作者: Sorehead    时间: 2007-12-11 13:55
RegisterHandler中只是赋值,并没有调用函数setHandler,所以这么没有参数问题。

你应该找找其它代码中的handler1、handler2和handler3是怎么使用的。
作者: oyd_admin    时间: 2007-12-11 14:01
我明白了,楼主其实还是被指针弄糊涂了。

绿
作者: dynamic516    时间: 2007-12-11 15:56
原帖由 Sorehead 于 2007-12-11 13:55 发表
RegisterHandler中只是赋值,并没有调用函数setHandler,所以这么没有参数问题。

你应该找找其它代码中的handler1、handler2和handler3是怎么使用的。


简明扼要的解决了我的问题,非常感谢!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2