#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
将参数视为全局变量。有什么我错过了或这是正常的吗?如果是正常的,请解释。
答案 0 :(得分:4)
由于您在_delete
函数中通过值传递指针,因此调用方中的值不会更改。
最快的解决方法是写
void _delete(node*& root)
即。通过引用传递指针:注意&
;您可能还想在指针上调用delete
,否则您会泄漏内存。函数change
按原样工作,因为您使用指针指向成员运算符->
。