wlgemini 2013-11-17 03:55 采纳率: 100%
浏览 2561
已采纳

c语言中函数指针作为参数与函数的嵌套

函数指针作为另一函数的参数和函数的嵌套的区别,感觉都是调用,有什么不一样呢?他们都适用在什么情况下!(我是在学非递归遍历二叉树时看到的)
Status Visit(TElemType e){
printf("%c\n",e);
return OK;
}
Status InOrderTraverse(BiTree T ,Status(*Visit)(TElemType e)){
SqStack S; InitStack(S); Push(S,T); SElemType p;
while (!StackEmpty(S)){
while(GetTop(S,p)&&p) Push(S,p->lchild);
Pop(S,p);
if(!StackEmpty(S)){
Pop(S,p); if(!Visit(p->data)) return ERROR;
Push(S,p->rchild);
}//if
}//while
return OK;
}
这里边Visit是函数指针,而SqStack和InitStack是嵌套,他们都不都是在调用吗?为什么在InOrderTraverse的参数中不再加上SqStack和InitStack呢,或者将参数*Visit去掉直接调用呢?

  • 写回答

2条回答 默认 最新

  • 寧靜以致遠 2013-12-23 03:29
    关注

    您好,针对这个问题
    Status InOrderTraverse(BiTree T ,Status(*Visit)(TElemType e))函数中第2个参数是一个指向函数的指针,这样做的目的是为了程序的灵活性。试想如果给你一个整型数100,要求分别按照10进行、16进制输出,你可以写一个输出10进制函数与输出16进制函数,当你有需要输出16进制时,只需要将16进制函数地址传给Visit就行,而不需要改变InOrderTraverse函数,这种做法灵活,也符合软件工程编程思想。

    另外,InitStack(S); 就是函数调用,这种就在InOrderTraverse已经写死了,如果有几种初始化情况的话,就得在InOrderTraverse增加判断条件来加以区分,这样增加了代码量。

    希望我的回答对您帮助!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 comsol稳态求解器 找不到解,奇异矩阵有1个空方程返回的解不收敛。没有返回所有参数步长;pid控制
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功