[讨论] 请问 void (*oper(ChainBinTree *p ))) 是什么意思呢?

HALO--117   2013-11-8 20:01 楼主
最近在啃二叉树算法,涉及到遍历的实现,下面是书里的二叉树遍历函数定义:
void BinTree_LDR(ChainBinTree *bt,void (*oper(ChainBinTree *p )))        //中序遍历
{
}
ChainBinTree 是二叉树结构体,
oper(ChainBinTree *p)是一个操作节点的函数,
请教void (*oper(ChainBinTree *p )) 这个操作的含义

回复评论 (5)

ChainBinTree 是二叉树结构体
ChainBinTree * 是二叉树结构体指针
oper(ChainBinTree *p)是一个操作节点的函数
void (*oper(ChainBinTree *p ))是一个指向操作节点的函数指针
点赞  2013-11-9 00:15
是指向一个函数的函数指针
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2013-11-9 06:40
一层一层地往外拆

以三个括号为标志

首先是 void(X)
然后X里再拆解X = *oper(ChainBinTree *p ))
则 拆成 ×oper(Y)
最后 Y = ChainBinTree *p
显然,这是一个 你说的那 什么 树 的指针
所以 X的意思就是 对这个指针 施加 oper操作。这是什么?

是一个函数,操作数的函数,从外形看,它应该是返回某个指针,这个指针很可能也是这个树的指针或者某种相关指针

那么我的猜测是最外一层void是一个对这个返回指针的强制转换。

感觉上,是一个非常复杂,别扭,操蛋的实现方式。

当然,具体要看上下文
点赞  2013-11-20 00:17

回复 4楼辛昕 的帖子

膜拜一下大湿,还有感谢所以帮忙解答的湿父~~   终于对它了解了个大概,我也觉得这样的写法····太不舒服了,嘿嘿
点赞  2013-11-21 18:37
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复