当我在指针前使用*时到底发生了什么?

时间:2014-12-17 07:45:43

标签: c++ class pointers object

当你" de-pointer"一个指针来访问它就好像它是一个对象,在对象的名称之前使用*运算符,它到底在做什么?

我问这个是因为我有指向存储大量数据的对象的指针,我不希望C ++复制它或做任何昂贵的事情。在我能够复制这个对象和使用其中的功能之间有一条很好的界限。

4 个答案:

答案 0 :(得分:2)

你得到一个左值,指的是位于指针给出的地址的对象。

通常,单独取消引用指针永远不会导致复制。当获取的引用用于构造相同类型的新对象(在通过值传递给函数时隐式发生),或者用作赋值运算符的参数时,会发生复制。

答案 1 :(得分:0)

当您取消引用指针时,您只是访问其元素;你没有复制任何东西。这两个调用做同样的事情:

(*p).element = 1;
p->element = 1;

如果你想要彻底的解释;你可以看看this question

答案 2 :(得分:0)

  

取消引用运算符或间接运算符,用“*”表示(即   星号(asterisk),是一种用C语言发现的一元运算符   包括指针变量。它操作一个指针变量,和   返回一个等于指针地址值的l值。   这称为“解除引用”指针。

http://en.wikipedia.org/wiki/Dereference_operator

当您使用指针指向对象时,指针只指向对象的地址,但它不会复制任何内容.....

答案 3 :(得分:0)

'*' returns the object as an l-value this pointer is pointing。它就这么简单。