可能重复:
what is the difference between (.) dot operator and (->) arrow in c++
在本书中,我正在学习指针,我刚刚完成了有关OOP(在地面上吐痰)的章节,无论如何它告诉我可以使用像这样的成员选择运算符( - >)。它说这就像“。”除了指向对象而不是成员对象。什么是差异,它看起来像是以同样的方式使用......
答案 0 :(得分:8)
其中:
Foo foo;
Foo* pfoo = &foo;
pfoo->mem
在语义上与(*pfoo).mem
完全相同。
或者换句话说:foo.mem
在语义上与(&foo)->mem
相同。
答案 1 :(得分:6)
是的,它实际上做了同样的事情,但对于不同类型的变量。
如果你有一个指针,你必须使用->
,而如果你有一个真正的价值,你将使用.
。
所以例如
struct mystruct *pointer;
struct mystruct var;
pointer->field = ...
var.field = ...
这一点都不难。请记住,使用指针时,您需要->
,否则需要.
。
答案 2 :(得分:5)
你只使用 - >当变量是对象的指针时:
A* a = new A;
a->member();
使用“。”当它不是指针时:
A a;
a.member();
答案 3 :(得分:1)
struct S
{
int a, b;
};
S st;
S* pst = &st;
st.a = 1; // . takes an object (or reference to one)
pst->b = 2; // -> takes a pointer
答案 4 :(得分:1)
如果有对象实例(MyObject object;
),则使用.
访问它的成员(方法,属性,字段等),如下所示:object.Member
。
如果有指向对象实例(MyObject* pObject = new MyObject();
)的指针,则需要取消引用指针,然后才能访问对象成员。要取消引用指针,请使用*
运算符。因此,当你将两者结合起来时,就得到这样的结果:(*pObject).Member
。
当然,这是不可读的,因此编译器将->
作为它的简写。因此,它变为pObject->Member
。
答案 5 :(得分:0)
也许这个例子会有所帮助
object o;
object *p = &o; // pointer to object
o.member; // access member
p->member; // access member through pointer
答案 6 :(得分:0)
使用->
取消引用指针,当您通过指针访问成员时,直接访问成员时使用.
。
class A
{
public:
int x;
void g() {};
};
A a;
a.x
a.g();
A * ap = new A();
ap->x;
ap->g();
你可以取消引用指针,然后使用.
:
(*ap).x;
(*ap).g();