我知道->
运算符可以是指向变量方向的指针,但为什么在使用*
指针运算符时使用它,有什么区别,我可以更喜欢其他?例如:
a*b
表示是指向b的指针(对吗?我可能会误认为是因为我是初学者)
是否相当于a->b
?
和a<-b
表示b是指向?
如果是这样,是否可以依赖->
,因为它更简单?
答案 0 :(得分:2)
a*b
通常表示&#34;乘以a
和b
&#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;
指向d
,c
也指向。{/ p>
引用与指针不同:
a
此处使用 int &e = b;
来指定&
是一个参考。此e
与用于获取地址的&
不同,不应混淆。在此处,&
将引用至e
他们将引用到某个对象,并始终表现为该对象:
b
这会增加++e;
。 b
现在有价值b
与指针不同,引用必须始终引用对象:
4
引用也可以引用指针:
int &f; // error
int *&g = a;
指的是g
但是指针不能指向引用:
a