繁体   English   中英

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

[英]C++ Pointer (Pass By Reference) Question

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

void someFunc(MyPtr*& Object)
{

}

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

它使您能够:

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;
}

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

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

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

为什么?

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

反正是指针只是引用?

亲爱的上帝,不。 甚至远不是同一件事。 看,你可以尝试通过一个指针开始建立一个参考的心理模型,但是当你修复所有的差异时,你有一个可怕的不合逻辑的混乱。

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

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

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

暂无
暂无

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

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