繁体   English   中英

如何取消引用C ++中通过引用传递的指针?

[英]How to dereference a pointer passed by reference in c++?

我正在做这样的事情:

void insert(Node*& node, string val, Node* parent)
{
   if (node == NULL)
     instantiateNode(node, val, parent);
   else
     insert(node->child, val, node);
}

问题是,当设置*parent时, instantiateNode(..., parent)似乎修改了传递给函数的原始*&node instantiateNode() 应该会更改node ,但是如果它更改了parent节点,则您将节点设置为它的父节点,这是没有意义的,并且也不起作用。 完全没有

我根本不喜欢指针引用的原因是因为它消除了特殊情况,并大大减少了我必须执行的错误检查数量。 由于我这样做是为了减少行数和琐碎的算法重复,因此可以通过将代码行数加倍来解决此问题。 但是我宁愿不这样做,而且我觉得应该有一种方法可以取消对指针引用的引用,以获取指向同一对象的新指针。 而且,实际上,我认为*&node通过*parent应该已经完成​​了,但是显然gcc正在对其进行优化。

应该有一种取消引用指针引用的方法,以获得指向同一对象的新指针。

好吧,这呢?

Node* n = node;

现在,您有了一个非引用指针,该指针指向与节点相同的对象,正是您要的。

我有95%的把握确定您面临的问题与引用无关,并且与instantiateNode中的错误逻辑或您的使用无关。 这就是为什么如果您向我们提供了有关代码应该执行的操作的更多信息,或者甚至将代码发布到了InstantiateNode上的原因,那么它会很有用。

node是对指针的引用,这意味着如果函数设置了node,则传入的值将更改。 这就是引用的工作方式。

如果您不想在调用函数中更改节点,请不要将其作为参考。

还是我误会了什么?

我认为node不需要通过引用传递。 一个简单的指针就可以完成任务。 这是因为您不需要直接更改它。 为什么将它传递给instantiateNode() 它将始终为NULL,那么它有什么用? 如果instantiateNode()也将其第一个参数作为引用传递,为什么? 您正在传递父级,因此instantiateNode()可以仅通过parent->child来访问应表示的事物node 即使出于某种原因, instantiateNode()确实通过引用接受了它的参数并且需要这样做,但我相信如果您从insert()的第一个参数中删除引用,该函数仍然可以工作。 函数返回时, instantiateNode()对该值所做的任何操作都将丢失。 很抱歉,这是如此令人困惑,但我想不出一种更好的措词。

您的问题还有另一种解释...也许您对insert()调用应显示为:

insert(node, val, node->child);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM