猿问

您好,请问以下的visit前为什么不加*?

Status PostOrderTraverse (BiTree T, Status( *visit)(TElemType e))
{ if (T)

if ( PostOrderTraverse(T->lchild, visit)) 
if (PostOrderTraverse(T->rchild, visit)) 
visit(T->data); 
return OK; 
else return ERROR;
}
else return OK;
}
那么函数体里的visit只是一个指针,并不是调用的函数,这是为什么
在C语言里好像看到都要加*号

慕村225694
浏览 120回答 2
2回答

www说

随便你,加和不加都一样的。但好像不加的人多些。可能这样输入代码可以简便些。呵呵,我就不爱特意去加个*。另外,如果函数要用*的话,一定是这种形式:(*visit)(T->data).*visit(T->data)这种形式是错误的,这样的代码变成了,先调用visit函数,传递参数T->data,然后返回值被当成了个指针处理,用*来解引用这个指针。加括号的理由是*的优先级比()的优先级低,这个你肯定也知道的!

海绵宝宝撒

因为visit本身就已经是指针了。
随时随地看视频慕课网APP
我要回答