C ++指针(通过引用传递)问题

时间:2011-01-07 08:00:08

标签: c++

通过引用传递的指针。为什么?反正是指针只是引用?这个参数到底发生了什么?

void someFunc(MyPtr*& Object)
{

}

7 个答案:

答案 0 :(得分:7)

简单来说,它使您能够更改指针本身:它可以更改为指向函数中的另一个位置。 而这种变化将反映在外面。

答案 1 :(得分:5)

它使您能够:

void someFunc(MyPtr*& Object)
{
  //Modify what Object is pointing to
  Object=&old_Object;

  //You can also allocate memory, depending on your requirements
  Object=new MyPtr;

  //Modify the variable Object points to
  *Object=another_object;
}

答案 2 :(得分:1)

其他人必须投票来验证这个原因我在C ++上有点生疏但我相信这里的想法是你通过引用传入一个指针,而不是创建一个新的空间来存储指针本身你使用对指针的引用,所以如果你要修改指针而不仅仅是从函数返回后它将被修改的值,否则你所能做的就是修改传入的位置的值。希望这是有道理的。

答案 3 :(得分:1)

仅传递指针的区别在于,如果指针被更改(Object = x),则调用函数将看到此更改。当您传递MyPtr** Object并取消引用指针*Object = x;时,您可以实现相同的目标。使用第二种方法,您可以将NULL传递给函数。这不适用于参考文献。

答案 4 :(得分:1)

你不太对劲。指针 content 通过引用传递,但指针本身仍然按值传递,即将其重新指向其他指针将不会在方法退出时反映,因为指针将设置为指向与呼叫前相同的内存块。可以把它想象成一个简单的int变量。但是使用& *或**,您可以重新指定指针,这将在此方法范围之外可见。

答案 5 :(得分:1)

  

为什么呢?

出于同样的原因,您可以通过引用传递任何其他内容。

  

不是指针只是参考?

亲爱的上帝,没有。甚至远不是同一件事。看,您可以尝试通过指针开头来构建参考的心理模型,但是当您修复所有差异时,您会感到非常糟糕不合逻辑的混乱。

引用是一个更简单,更直观的概念,并且只有“历史原因”才能尝试理解它们之前的指针。 Modern C ++很少使用原始指针,并尽可能将它们视为实现细节。

引用是已存在事物的另一个名称。而已。当用作函数参数时,它们允许被调用函数引用调用者的数据。

答案 6 :(得分:0)

这也意味着指针可以是0(NULL),这可能对方法有意义。引用必须始终有效,不能成为“无”

相关问题