如何修改对结构成员变量的指针引用 我想在C++中创建BST。当我尝试将指针分配给新节点时,它不会改变。函数调用后,它仍然具有随机值。有可能按我的方式做吗 struct wezel { int value; wezel *l_val; wezel *r_val; wezel(int aValue) { value = aValue; l_val = NULL; r_val = NULL; } }; struct tree { wezel *root; tree(wezel *aNode) { root = aNode; } }; void addNode(int aValue, wezel aNode) { if(aValue < aNode.value) { if(aNode.l_val == NULL) { wezel pt = wezel(aValue); wezel *point = &pt; aNode.l_val = point; //do not work } else { return addNode(aValue, *aNode.l_val); } } else if(aValue > aNode.value) { if(aNode.r_val == NULL) { wezel pt = wezel(aValue); wezel *point = &pt; aNode.r_val = point; //do not work } else { return addNode(aValue, *aNode.r_val); } } struct wezel{ int值; 韦泽尔·卢瓦尔; 韦泽尔·鲁瓦尔; 韦泽尔(国际货币基金组织){ 价值=价值; l_val=NULL; r_val=NULL; } }; 结构树{ 韦泽尔*根; 树(wezel*阳极){ 根=阳极; } }; 无效添加节点(int aValue、wezel阳极){ if(电压阳极值){ 如果(阳极r_val==NULL){ 韦泽尔pt=韦泽尔(阿瓦鲁); 韦泽尔*点=&pt; aNode.r_val=point;//不工作 }否则{ 返回addNode(aValue,*aNode.r_val); } }

如何修改对结构成员变量的指针引用 我想在C++中创建BST。当我尝试将指针分配给新节点时,它不会改变。函数调用后,它仍然具有随机值。有可能按我的方式做吗 struct wezel { int value; wezel *l_val; wezel *r_val; wezel(int aValue) { value = aValue; l_val = NULL; r_val = NULL; } }; struct tree { wezel *root; tree(wezel *aNode) { root = aNode; } }; void addNode(int aValue, wezel aNode) { if(aValue < aNode.value) { if(aNode.l_val == NULL) { wezel pt = wezel(aValue); wezel *point = &pt; aNode.l_val = point; //do not work } else { return addNode(aValue, *aNode.l_val); } } else if(aValue > aNode.value) { if(aNode.r_val == NULL) { wezel pt = wezel(aValue); wezel *point = &pt; aNode.r_val = point; //do not work } else { return addNode(aValue, *aNode.r_val); } } struct wezel{ int值; 韦泽尔·卢瓦尔; 韦泽尔·鲁瓦尔; 韦泽尔(国际货币基金组织){ 价值=价值; l_val=NULL; r_val=NULL; } }; 结构树{ 韦泽尔*根; 树(wezel*阳极){ 根=阳极; } }; 无效添加节点(int aValue、wezel阳极){ if(电压阳极值){ 如果(阳极r_val==NULL){ 韦泽尔pt=韦泽尔(阿瓦鲁); 韦泽尔*点=&pt; aNode.r_val=point;//不工作 }否则{ 返回addNode(aValue,*aNode.r_val); } },c++,pointers,struct,C++,Pointers,Struct,}) 在这里,您正在创建一个wezel类型的pt对象,一旦它超出范围就会被销毁,而指针“point”和aNode.l_val仍然指向它的地址。(顺便说一句,“点”在离开范围时也会被销毁。) 相反,您应该创建一个新对象,链接到aNode.l_val,如下所示: aNode.l_val = new wezel(aValue); 不要忘记用相应的“delete”语句正确地处理节点。点指向pt,但是pt在if块结束后不存在l_val现在指向awezel过去的位置,但现在不在了。输出仍然相同。我想这是因

})

在这里,您正在创建一个wezel类型的pt对象,一旦它超出范围就会被销毁,而指针“point”和aNode.l_val仍然指向它的地址。(顺便说一句,“点”在离开范围时也会被销毁。)

相反,您应该创建一个新对象,链接到aNode.l_val,如下所示:

aNode.l_val = new wezel(aValue);

不要忘记用相应的“delete”语句正确地处理节点。

指向
pt
,但是
pt
if
块结束后不存在
l_val
现在指向a
wezel
过去的位置,但现在不在了。输出仍然相同。我想这是因为你不能改变函数中的指针引用——我不知道如何处理它——你在else-if块中也同样改变了它吗?是的。似乎您只能更改ponter的值,而不能更改他的引用。最后通过更改为void addNode(int aValue,wezel*阳极)解决了这个问题-之前我是按值传递wezel的
aNode.l_val = new wezel(aValue);