【问题标题】:Passing Pointer to an Object将指针传递给对象
【发布时间】:2023-03-27 09:04:01
【问题描述】:

当我将指针(指向对象)作为参数传递给被调用函数时,为什么不复制对象的属性?有没有实际原因导致这种情况没有发生?

例如,如果 x 是指向对象的指针,则调用函数中的赋值 x=y 对调用函数不可见。然而,赋值 x.f=3 是可见的(f 是一个属性)。

谢谢!

【问题讨论】:

  • 语言是什么? C++?让a Minimal, Complete, and Verifiable example解释你自己。
  • 对不起,这是来自麻省理工学院“算法导论”的第一章。这是伪代码规则的一部分,因此没有指定编程语言。
  • 不同语言的objectpointerattributesassignment的概念/规则略有不同i> 等
  • 请指定语言;每种语言使用不同的约定。

标签: pointers


【解决方案1】:

指针(在 c 和 c++ 以及大多数其他语言中)是指向实际对象所在内存地址的变量。

  1. 将一个指针分配给另一个指针只是将该地址从一个指针复制到另一个指针。将指针 p 传递给函数,其中调用相应的参数 x 会导致两个指针指向相同的地址/对象:一个在调用函数内部 (p),一个在被调用函数内部 (@987654324 @),但您仍然只有一个对象 (obj1)。
  2. 现在,x.f=3(或 c/c++ 语法中的 c->f=3)表示:
    “将 3 分配给对象 x 指向的属性 f”。因为这是同一个对象,p 指向,你也可以通过p 观察到这种变化。
  3. 但是,如果函数内部有另一个指针 y 指向不同的对象 (obj2),并且将该指针分配给 x,则不会将 obj2 的内容复制到 obj1,而是仅将 obj2 的 ADDRESS 复制到 x 并保持 obj1 不变。现在x 指向与p 不同的对象,因此之后您将不会通过p 观察到任何变化。

【讨论】:

    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 2013-06-05
    • 2019-02-07
    相关资源
    最近更新 更多