将指针传递给对象

时间:2015-03-17 15:41:01

标签: pointers

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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