怎么正确使用函数指针?

lfangqing2003 2006-05-22 11:25:40
比如我有下面两个定义:

int ListTraverse(SqList L,int (*visit)(SqList &L,int a));

int visit(SqList &L,int a);

这样调用为什么会出错?

ListTraverse(l,visit(l,i));
...全文
182 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sharpdew 2006-05-23
  • 打赏
  • 举报
回复
ListTraverse(l,visit);
悠然红茶 2006-05-23
  • 打赏
  • 举报
回复
ListTraverse(l,visit(l,i));的写法其实是把visit(l,i)的返回值作为参数传给ListTraverse()了,参数类型不符,当然编译会出错。应该写成ListTraverse(l,visit); 这样才表示要把函数指针传入。
Roy T 2006-05-23
  • 打赏
  • 举报
回复

函数名作为参数就不要再写这个函数的参数了
ListTraverse(l,visit);
就OK

看的吴伟民的数据结构吧,又&又*的,呵呵
jixingzhong 2006-05-23
  • 打赏
  • 举报
回复
ListTraverse(l,visit(l,i));

参数中的 visit(l,i) ...
参数只能是 函数入口地址(visit或者楼上的 &visit都可以的),
但是这个visit函数的参数就无效了 ...
lfangqing2003 2006-05-23
  • 打赏
  • 举报
回复
谢谢各楼,明白了一点点了.唉,蒙了,看数据结构头都大了.
0黄瓜0 2006-05-22
  • 打赏
  • 举报
回复
class SqList {};
int ListTraverse(SqList L,int (*pfunc)(SqList &L,int a))
{ /*定义函数指针*/
//dosomething
int c=0;
(*pfunc)(L,c);//通过函数指针调用函数
return 0;
}

int visit(SqList &L,int a)
{
//dosomething
//test
printf("visit()\n");
return 0;
}

int main()
{ SqList sl;
ListTraverse(sl,&visit);//传一个函数的指针
return 0;
}
agaric 2006-05-22
  • 打赏
  • 举报
回复
1.调用前需声明
2.名字是不是冲突了.

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧