类操作符之间的区别

时间:2011-04-07 20:35:52

标签: c++ class pointers operators

我正在阅读C ++,并且想知道是否有人可以向我解释一些类操作符的某些差异。有问题的运营商是:

* & . ->

我了解其中一些,但是,我没有看到一些之间的区别。例如:

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

有人可以使用一个例子并解释一下它们会有什么不同吗?

5 个答案:

答案 0 :(得分:6)

采用我的样品给出的这种小结构:

struct MyStruct {
   int y;
};

*x取消引用指针x。返回值是对x

指向的对象的引用
MyStruct* x = ...;
MyStruct xval = *x;
// or
MyStruct& xref = *x;
// read up on references to understand the latter

&x获取x的地址。因此,结果是指向x

的指针
MyStruct x;
MyStruct* pointer_to_x = &x;

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

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;

答案 1 :(得分:3)

*x是取消引用运算符,如果您有memoryAddress,那么*memoryAddress就是相应的对象。

相反,&x是引用运算符,如果您有object,则&object提供内存地址。

对于访问变量,x->y基本上是(*x).y的快捷方式,即取消引用然后访问成员。

答案 2 :(得分:2)

继续阅读!我将简要介绍一对夫妇,但在你真正了解一些基本概念之前,它可能仍然没有意义。

* x是解除引用的运算符。这意味着它将'x'视为内存的地址,并查找该内存位置中的内容并返回该值。因此,如果x = 100,* x查找内存地址100中的内容,并返回该内存位置中的值。

& x返回变量x存储的地址。如果x = 100,则再次想象,但值100存储在地址50.& x将返回50,x将返回100,并且* x返回存储在内存地址100中的值。

其他人需要更多解释,但也需要更多地了解类和结构。我建议你继续阅读并做更多的例子,因为现在可能不仅仅是一个冗长的解释。

答案 3 :(得分:1)

*xdereference运算符。也就是说,它是&运算符的倒数 - 它获取指针指向的内存值。

&是一个返回变量内存地址的运算符。

x.y表示访问x

的成员y

x -> y(*x).y

的同义词

答案 4 :(得分:1)

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