- >之间的差异运算符和指针*(c ++)

时间:2017-02-23 10:02:57

标签: c++ c++11 pointers dereference

我知道->运算符可以是指向变量方向的指针,但为什么在使用*指针运算符时使用它,有什么区别,我可以更喜欢其他?例如:

a*b

表示是指向b的指针(对吗?我可能会误认为是因为我是初学者)

是否相当于a->b

a<-b表示b是指向?

的指针

如果是这样,是否可以依赖->,因为它更简单?

2 个答案:

答案 0 :(得分:2)

a*b通常表示&#34;乘以ab&#34;。 C ++只有很少的词法元素,其中许多用于许多不同的目的,因此上下文很重要。

a->b是成员访问权限,对应(*a).b,即访问b指向的a成员。

请注意,*->运算符都可以重载。

答案 1 :(得分:1)

对我来说,似乎你对指针的作用以及*所属的地方感到困惑 指针是一种特殊类型的对象,它将指向另一个对象,而不是来自对象。
指针可以这样声明:

int *a;

此处,*指定a是指针。指针类型与它们指向的对象类型是不同的类型 但a指出的是不确定的。您需要指定地址才能使a指向某个内容。为此,让我们创建一个整数(这里用值2初始化):

int b = 2;

a指向b

a = &b;

此处,一元&运算符用于获取b 地址。然后将其分配给a,然后a指向b 当然,也可以初始化指针。上述陈述可以替换为:

int b = 2;
int *a = &b;

那么,您如何从b获得a的价值?您可以通过取消引用 a

来实现
std::cout << *a << std::endl;

这会打印2。此处使用一元运算符*取消引用 a。此*与上面用于声明*的{​​{1}}不同,不应混淆。

a

这会增加++*a; b现在有价值b 您可以通过指定另一个地址使3指向其他对象:

a

现在int c = 3; a = &c; 指向a而不是c 您可以复制指向同一对象的指针:

b

现在int *d = a; 指向dc也指向。{/ p>

引用与指针不同:

a
此处使用

int &e = b; 来指定&是一个参考。此e与用于获取地址的&不同,不应混淆。在此处,& 引用至e 他们引用到某个对象,并始终表现为该对象:

b

这会增加++e; b现在有价值b 与指针不同,引用必须始终引用对象:

4

引用也可以引用指针:

int &f; // error

int *&g = a; 指的是g 但是指针不能指向引用:

a