我正在阅读C ++,并且想知道是否有人可以向我解释一些类操作符的某些差异。有问题的运营商是:
* & . ->
我了解其中一些,但是,我没有看到一些之间的区别。例如:
*x
&x
x.y
(*x).y
x -> y
有人可以使用一个例子并解释一下它们会有什么不同吗?
答案 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)
*x
是dereference
运算符。也就是说,它是&
运算符的倒数 - 它获取指针指向的内存值。
&
是一个返回变量内存地址的运算符。
x.y
表示访问x
x -> y
是(*x).y
答案 4 :(得分:1)
&
获取对象的内存地址*
获取内存地址指向的对象.
访问对象的成员->
从指向对象的指针访问成员