类操作符之间的区别

Difference Between Class Operators

本文关键字:区别 之间 操作符      更新时间:2023-10-16

我正在读一点c++,想知道是否有人可以解释一些类操作符的一些差异给我。所讨论的操作符是:

* & . ->

我理解其中的一些,然而,我看不出其中一些的区别。例如:

*x
&x
x.y
(*x).y
x -> y

谁能举个例子解释一下它们有什么不同吗?

以我的示例为例:

struct MyStruct {
   int y;
};

*x对指针x解引用。返回值是对x所指向的对象的引用:

MyStruct* x = ...;
MyStruct xval = *x;
// or
MyStruct& xref = *x;
// read up on references to understand the latter

&xx的地址。因此,结果是指向x的指针。

MyStruct x;
MyStruct* pointer_to_x = &x;

x.y访问对象x中名为y的成员。

MyStruct x;
x.y = 5;
int a = x.y + 2;
// a==7

(*x).y是第一个和第三个的组合:指针被解引用,. -操作符用于访问它所指向的对象的成员。

a = (*pointer_to_x).y;

x->y(*x).y的快捷方式(除非被邪恶的人覆盖)。

a = pointer_to_x->y;

*x是解引用运算符,如果您有memoryAddress,则*memoryAddress是相应的对象。

反之,&x是引用操作符,如果有object,则&object提供内存地址。

对于访问变量,x->y基本上是(*x).y的快捷方式,即先解引用再访问成员

继续往下读!我将简要地给出一些,但在你真正理解一些潜在的概念之前,它可能仍然没有意义。

*x是解引用操作符。这意味着它把'x'当作内存的地址,它查找那个内存位置的内容并返回那个值。因此,如果x = 100, *x查找内存地址100中的内容,并返回该内存地址中的值。

&x返回存储变量x的地址。再想象一下,如果x = 100,但是值100存储在地址50。&x将返回50,x将返回100,*x返回存储在内存地址100中的值。

其他的需要更多的解释,但也需要对类和结构有更多的理解。我建议你继续阅读并做更多的例子,因为这可能比现在冗长的解释更有帮助。

*xdereference操作符。也就是说,它是&操作符的逆操作——它获取指针所指向的内存的值。

&是返回变量的内存地址的操作符。

x.y表示访问x的成员y

x -> y(*x).y的同义词

  • &获取对象的内存地址
  • *获取内存地址
  • 所指向的对象
  • .访问对象的成员
  • ->从对象指针访问成员