通过引用传递的指针。为什么?反正是指针只是引用?这个参数到底发生了什么?
void someFunc(MyPtr*& Object)
{
}
答案 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),这可能对方法有意义。引用必须始终有效,不能成为“无”