我正在听一个讲座,它展示了一些代码,可以像一样递归地打印出二进制搜索树
void printTree(node *t){
if(t!=NULL){
printTree(t->left);
cout<<t->key<<endl;
printTree(t->right);
}
}
我理解它在做什么,但我不明白其中的含义。该函数正在传递一个指向节点的指针,但在"cout"行中,它正在尝试访问节点结构中的键值,而不首先取消对它的引用。我的意思是,它不应该是类似的东西吗
cout<<(*t)->key<<endl;
相反?
实际上,->
是一个解引用运算符。你可以选择:
cout<<t->key<<endl;
或cout<<(*t).key<<endl;
但绝对不是"(*t)->key"-如果不是崩溃的话,这将是一个双重deref,可能是一个编译错误。