c ++问题,关于*和 - >

时间:2011-05-08 07:10:16

标签: c++

当我有一个像:

这样的指针
MyClass * pRags = new MyClass;

所以我可以使用

pRags->foo()

(*pRags).foo()

打电话给foo。

为什么这两个是相同的?什么是* pRags?

谢谢

8 个答案:

答案 0 :(得分:5)

  

为什么这两个相同?

它们是等价的,因为规范说它们是等价的。内置->是根据内置*.定义的。

  

什么是*pRags

MyClass指向的pRags对象。 * 取消引用指针,产生指向对象。

有关详细信息,请考虑选择a good introductory C++ book

答案 1 :(得分:5)

除了其他答案,' - >'是为了方便。每次访问函数的类变量时,取消引用指向对象的指针都非常难看,不方便,而且可能更容易混淆。

例如:

(*(*(*car).engine).flux_capacitor).init()

vs

car->engine->flux_capacitor->init()

答案 2 :(得分:4)

pRags->foo() 定义作为语法糖,相当于(*pRags).foo()

*运算符取消引用指针。也就是说,它表示你正在操作指针指向的内容,而不是指针本身。

答案 3 :(得分:2)

->只是编写(*).的便捷方式。 *pRagspRags中存储的地址对象。

答案 4 :(得分:1)

  • 是的,他们是完全相同的。 ->包含在C中(因此继承到C ++中)作为符号方便。
  • 该上下文中的
  • *用于取消引用指针。

答案 5 :(得分:1)

一元*被称为dereferencing operator。取消引用指针会将T*变为T&;取消引用一个对象会在该对象值上调用该对象类型的一元operator*(如果已定义),或者给出错误。

答案 6 :(得分:1)

(*pRags)通过指针pRags并获取整个对象,因此您可以使用常规点表示法.

答案 7 :(得分:1)

pRags是MyClass类型的指针。就像你可以有原始数据类型的指针,例如int ptr,你也可以有指向对象的指针,在这种情况下由pRags表示。现在使用箭头操作符( - >)访问对象“members”,或者您可以使用“。”。并取消引用“*”来访问对象的成员值。这里的成员是MyClass中的变量。所以,foo()会在MyClass中有一个定义。