->运算符和指针 * 之间的区别 (C++)

difference between -> operator and the pointer * (c++)

本文关键字:之间 区别 C++ 指针 gt 运算符      更新时间:2023-10-16

我知道->操作员可以是指向变量方向的指针,但是为什么当您拥有*指针操作员时,为什么使用它,有什么区别,我可以更喜欢一个而不是其他?例如:

a*b

表示A指向B(对吗?我可能会因为我是初学者而误会原谅我)

它等于a->b

a<-b含义b是指向A?

的指针

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

a*b通常表示"乘法ab"。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;

这增加了bb现在具有值3
您可以通过分配另一个地址将a指向另一个对象:

int c = 3;
a = &c;

现在a指向c而不是b
您可以复制指针,该指针指向相同的对象:

int *d = a;

现在d指向ca也指向。

引用与指示不同:

int &e = b;

&在此使用来指定e是参考。此&与用于获取地址的&不同,不应混淆。在这里,e 参考 b
他们参考对一个对象,并且始终表现得像它们是那个对象:

++e;

这增加了bb现在具有值4
与指针不同,参考必须始终参考一个对象:

int &f; // error

参考也可以指指指针:

int *&g = a;

ga
但是指针不能指向参考:

int &*h = &e; // error