2

这两个任务是等价的,即执行完全相同的事情吗?

*pointer = object

pointer = &object

,其中指针是指向“对象实例”的指针。

或者这仅对原始类型有意义。

4

4 回答 4

12

No, these are not the same.

pointer = &object sets pointer so that it points at object.

*pointer = object sets the value of thing being pointed to by pointer to be equal to the value of object.

于 2012-04-05T11:32:32.077 回答
5

Absolutely not.

*pointer = object

changes the memory the pointer points to.

pointer = &object

changes the pointer.

pointer   ---->    object1
&object   ---->    object

In the first case, this becomes:

pointer   ---->    object
&object   ---->    object   

In the second case:

                  ---->    object1 //could turn into a memory leak
&object, pointer  ---->    object
于 2012-04-05T11:32:22.440 回答
2

不,这些不是等价的。第一个使指针的目标值等于右侧的对象。第二个更改指针本身,使其指向右侧的对象。

换句话说,在第一个之后,内存中有两个值等于object' 值的对象。在第二个之后,只有一个具有该值的对象,另外还有一个指向该对象的指针。

于 2012-04-05T11:42:23.097 回答
0

不。

您的第一个表达式将对象的值分配给指针。

假设您的指针变量指向 0x1234。第一次分配后,地址 0x1234 将包含值“对象”。

而第二次赋值将使指针指向对象的地址。

如果您在第一个赋值指针之后更改值对象,则不会注意到任何内容。

其中作为第二个赋值,如果你改变对象的值,你可以通过

*pointer. 
于 2012-04-05T11:37:06.810 回答