C ++ - 将节点设置为NULL不起作用

时间:2017-07-06 14:19:46

标签: c++ pointers binary-tree

#include <iostream>
using namespace std;
struct node{
  int val;
  node* left, *right;
};

void _delete(node *root)
{
  root = NULL;
}
void change(node *root)
{
  root->val = 6;
}
int main()
{
  node * root = new node;
  root->val = 5;
  change(root);
  _delete(root);
  cout<<root->val<<endl;
  return 0;
}

上述程序的输出为6.好像_delete函数对根节点没有影响,但change函数对根节点有影响。几乎就好像delete将传递的参数视为局部变量,但change将参数视为全局变量。有什么我错过了或这是正常的吗?如果是正常的,请解释。

1 个答案:

答案 0 :(得分:4)

由于您在_delete函数中通过值传递指针,因此调用方中的值不会更改。

最快的解决方法是写

void _delete(node*& root)

即。通过引用传递指针:注意&;您可能还想在指针上调用delete,否则您会泄漏内存。函数change按原样工作,因为您使用指针指向成员运算符->