【发布时间】:2015-08-05 11:15:29
【问题描述】:
我试图使用 C++ 实现 BST,所以我尝试了这个:
#include <iostream>
#include <stdlib.h>
struct node
{
int value;
node* left;
node* right;
};
void insert(node *cur , int val)
{
if(!cur)
{
cur = new node;
cur->value = val;
cur->left = NULL;
cur->right = NULL;
return;
}
if(val <= cur->value)
insert(cur->left , val);
else
insert(cur->right , val);
}
using namespace std;
int main()
{
node *root = NULL;
insert(root , 20);
insert(root , 21);
cout<<(*root).value;
return 0;
}
但我有一个问题,我的insert() 函数运行良好,但cur 的变化似乎没有反映到root 指针中,因为root 在`insert() 之后仍然是NULL函数调用。这里有什么问题?
编辑:感谢您的所有回答,使指向指针的指针看起来既丑陋又乏味,有没有其他方法可以通过其他设计来实现这一点?
【问题讨论】:
-
参数按值传递(函数接收参数值的副本)。所以
cur是调用参数的本地副本,这就是cur = whatever修改本地参数的原因。您需要通过引用传递它,即node *&cur
标签: c++ function pointers pass-by-value