我知道->
操作员可以是指向变量方向的指针,但是为什么当您拥有*
指针操作员时,为什么使用它,有什么区别,我可以更喜欢一个而不是其他?例如:
a*b
表示A指向B(对吗?我可能会因为我是初学者而误会原谅我)
它等于a->b
?
和 a<-b
含义b是指向A?
如果是这样,是否可以依靠->
,因为它更简单?
a*b
通常表示"乘法a
和b
"。C 只有很少的词汇元素,并且其中许多具有许多不同的目的,因此上下文很重要。
a->b
是成员访问,对应于 (*a).b
,即访问 a
指向的值的 b
成员。
请注意,*
和->
运算符都可以重载。
对我来说,似乎您对指针的作用以及*
属于的何处感到困惑。
指针是一种特殊类型的对象类型,将指向另一个对象,而不是对象。
可以这样声明指针:
int *a;
在这里,*
指定a
是指指针。指针类型与他们指向的对象的类型不同。
但是a
指向的是不确定的。您需要分配地址使a
指向某物。为此,让我们制作一个整数(此处使用值2
初始化):
int b = 2;
和令a
指向b
:
a = &b;
在这里,Unary &
操作员用于采用b
'S 地址。然后将其分配给a
,然后将a
点分配给b
。
当然,也可以初始化指针。上面的语句可以替换为:
int b = 2;
int *a = &b;
那么,如何从a
获得b
的值?您可以通过删除 a
:
std::cout << *a << std::endl;
这打印2
。一元操作员*
在此使用 dereference a
。此*
与用于在上面声明a
的*
不同,不应混淆。
++*a;
这增加了b
。b
现在具有值3
。
您可以通过分配另一个地址将a
指向另一个对象:
int c = 3;
a = &c;
现在a
指向c
而不是b
。
您可以复制指针,该指针指向相同的对象:
int *d = a;
现在d
指向c
,a
也指向。
引用与指示不同:
int &e = b;
&
在此使用来指定e
是参考。此&
与用于获取地址的&
不同,不应混淆。在这里,e
参考 b
。
他们参考对一个对象,并且始终表现得像它们是那个对象:
++e;
这增加了b
。b
现在具有值4
。
与指针不同,参考必须始终参考一个对象:
int &f; // error
参考也可以指指指针:
int *&g = a;
g
指a
。
但是指针不能指向参考:
int &*h = &e; // error