【问题标题】:Edit where a pointer points within a function编辑指针在函数中指向的位置
【发布时间】:2012-01-27 17:22:10
【问题描述】:

我有一个指向 C++ 结构对象的指针。

 node *d=head;

我想通过引用将该指针传递给函数并编辑它指向的位置。我可以传递它,但它不会改变初始指针指向的位置,而只会改变函数中的本地指针。函数的参数必须是指针对吗?之后如何更改它以显示同一结构的不同对象?

【问题讨论】:

  • 您想将d 传递给另一个函数,但是当另一个函数修改d(通过引用)时,head 会发生变化?来电者是如何通过head 传递给您的?

标签: c++ pointers reference struct


【解决方案1】:

您有两个基本选择:通过指针或通过引用。通过指针传递需要使用指向指针的指针:

void modify_pointer(node **p) {
    *p = new_value;
}

modify_pointer(&d);

引用传递使用&:

void modify_pointer(node *&p) {
    p = new_value;
}

modify_pointer(d);

如果您将指针作为 node *d 传递,那么在函数内修改 d 只会修改本地副本,如您所见。

【讨论】:

    【解决方案2】:

    通过引用传递:

    void foo(node*& headptr)
    {
         // change it
         headptr = new node("bla");
         // beware of memory leaks :)
    }
    

    【讨论】:

      【解决方案3】:

      node ** 作为参数传递给您的函数:

      // f1 :
      node *d = head;
      
      f2(&d);
      
      // f2:
      void f2(node **victim) {
          //assign to "*victim"
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        • 1970-01-01
        • 2019-04-12
        相关资源
        最近更新 更多