#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
将参数视为全局变量。有什么我遗漏的还是正常的?如果正常,请说明。
由于您在函数中按值传递指针_delete
,因此调用方中的值不会更改。
最快的解决方法是写
void _delete(node*& root)
即通过引用传递指针:注意&
;您可能还想delete
在那里调用指针,否则会泄漏内存。该函数change
按原样工作,因为您使用的是指向成员operator的指针->
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句