函数无目的地更改引用

Function changes reference without purpose

本文关键字:引用 目的地 无目的 函数      更新时间:2023-10-16

我有一个代码:

Node** ptrlow = ReturnLowest(root); ///pointer po pointer pointing lowest
//DeleteNode(ptrlow);
Test(ptrlow);

我认为这段代码的作用并不重要,重要的是,当我意识到函数 DeleteNode(Node** &node) 毫无目的地更改 ptrlow 的值时,我创建了名为 Test 的函数:

void Test(Node** &node)
{
return;
}

这实际上是整个函数,它什么都不做,但它改变了 ptrlow 的值,该值被传递给该函数。

在进入测试功能之前: 从视觉工作室链接到屏幕 输入后: 从视觉工作室链接到屏幕 在调试器中再走一步,节点就会发生变化: 从视觉工作室链接到屏幕

有人可以向我解释这怎么可能吗?我将不胜感激!

在最后一张图片上,调试器超出了函数的范围,因此传递的参数应该已经被丢弃(node不再存在)。

正如预期的那样,Node** ptrlow的值保持不变。

我知道它应该保持不变,但是看,它确实发生了变化: 将此屏幕与第一个屏幕进行比较

我试着放一些代码行,DeleteNode函数,有很多。

开头的删除节点函数

DeleteNode 功能更进一步;节点已更改