【发布时间】:2011-04-07 20:35:51
【问题描述】:
我正在读一点 C++,想知道是否有人可以向我解释一些类运算符的一些差异。有问题的运营商是:
* & . ->
我理解其中的一些,但是,我看不出它们之间的区别。例如:
*x
&x
x.y
(*x).y
x -> y
有人可以举个例子并解释一下他们会有什么不同吗?
【问题讨论】:
标签: c++ class pointers operators
我正在读一点 C++,想知道是否有人可以向我解释一些类运算符的一些差异。有问题的运营商是:
* & . ->
我理解其中的一些,但是,我看不出它们之间的区别。例如:
*x
&x
x.y
(*x).y
x -> y
有人可以举个例子并解释一下他们会有什么不同吗?
【问题讨论】:
标签: c++ class pointers operators
采用这个为我的样本提供的小结构:
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 访问对象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。
其他的需要更多的解释,但也需要对类和结构有更多的理解。我建议您继续阅读并做更多示例,因为现在可能比冗长的解释更有帮助。
【讨论】:
*x 是dereference 运算符。也就是说,它与 & 运算符相反 - 它获取指针指向的内存的值。
&是返回变量内存地址的运算符。
x.y 表示访问x 的成员 y
x -> y 是 (*x).y 的同义词
【讨论】:
& 运算符,但不知道取消引用运算符。
&获取对象的内存地址*获取内存地址指向的对象. 访问对象的成员-> 从指向对象的指针访问成员【讨论】: