类操作符之间的区别
Difference Between Class Operators
我正在读一点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
&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
的同义词
-
&
获取对象的内存地址 -
*
获取内存地址 所指向的对象 -
.
访问对象的成员 -
->
从对象指针访问成员
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 这 4 个 lambda 表达式之间有什么区别?
- 结构体 S { int align; } 之间的区别;(struct 关键字后的名称)和 struct { int al
- (double) 和 double() 之间的区别
- & 和 * 之间的区别
- std::is_convertible 和 std::convertible_to 之间的区别(在实践中)?
- 析构函数和'delete'之间的区别
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- OpenMP #pragma omp for v/s #pragma omp parallel for 之间的区别?
- S() 与 S{} 之间的区别?