免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7891 | 回复: 10
打印 上一主题 下一主题

使用函数指针调用需要参数的函数,为何可以不带参数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 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 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-12-10 16:37 |只看该作者
那不过是一个函数地址而已.

论坛徽章:
0
3 [报告]
发表于 2007-12-10 17:04 |只看该作者
指针就是指针。

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

函数指针的参数,在某些情况下(比如,有时候,有的编译器,有的操作,如赋值),可以对等号右边的函数原型进行检查(比如参数个数)

论坛徽章:
0
4 [报告]
发表于 2007-12-10 17:05 |只看该作者
当然,我强调了,某些情况下

不要依赖这个,因为C不是Java

论坛徽章:
0
5 [报告]
发表于 2007-12-10 21:28 |只看该作者
我是在读其他人的程序,发现setHandler()这个函数的参数一直没有值传入,即使使用地址访问,没有参数这个函数也应该不能正常编译或运行啊

迷糊了

论坛徽章:
0
6 [报告]
发表于 2007-12-11 10:02 |只看该作者
那就是没有道理的规定,C比较灵活,有的时候很个性,普遍的规律不存在

论坛徽章:
0
7 [报告]
发表于 2007-12-11 11:20 |只看该作者
各位大虾是否能指点下
void setHandler(int index)
{
    g_cntx->curItem = (int)index;

}
不给这个函数传参数的话,g_cntx->curItem 是多少啊
是随机的内存值还是默认为什么值哦

论坛徽章:
0
8 [报告]
发表于 2007-12-11 13:55 |只看该作者
楼主你先把代码找全吧?
它在哪调用这个函数没传参数呢?
RegisterHandler(setHandler) 并非调用setHandler好吧?

论坛徽章:
0
9 [报告]
发表于 2007-12-11 13:55 |只看该作者
RegisterHandler中只是赋值,并没有调用函数setHandler,所以这么没有参数问题。

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

论坛徽章:
0
10 [报告]
发表于 2007-12-11 14:01 |只看该作者
我明白了,楼主其实还是被指针弄糊涂了。

绿
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP