【问题标题】:Difference Between Class Operators类运算符之间的区别
【发布时间】:2011-04-07 20:35:51
【问题描述】:

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

* & . ->

我理解其中的一些,但是,我看不出它们之间的区别。例如:

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

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

【问题讨论】:

    标签: c++ class pointers operators


    【解决方案1】:

    采用这个为我的样本提供的小结构:

    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 和 &x 更清晰:因为 & 得到一个对象的地址并且 * 引用一个地址,所以它们可以被认为是“对立的”。也就是说 *&x == x 是真的。或者 *&*&*&*&x == x 同样为真。
    • 感谢您的示例和详细回复。在您的回复和其他人之间,我已经有了更好的理解,非常感谢。
    【解决方案2】:

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

    反过来,&x 是引用运算符,如果你有一个object,那么&object 提供内存地址。

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

    【讨论】:

    • 感谢您进一步解释解引用运算符。我特别难以理解这一点,这阻碍了我对上一个的理解
    【解决方案3】:

    继续阅读!我将简要介绍几个,但在您真正理解一些基本概念之前,它可能仍然没有意义。

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

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

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

    【讨论】:

    • 谢谢,我了解类和结构的基础知识,只是不太了解其中一些如何使用。你提到做例子,你不会碰巧知道我可以在哪里找到一些例子来测试,是吗?从所有的解释中,我相信我理解它并愿意对其进行测试!
    • 回到我的时代(实际上并不是很久以前),我得到了一本带有编译器的书,并仔细阅读了这本书。它有课程和东西。现在我认为您可以在线输入代码并解析它们......这可能是尝试代码示例的一种更好且更简单的方法。
    【解决方案4】:

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

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

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

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

    【讨论】:

    • 感谢您的详细回答,您的第一行帮助我理解了大多数其他行,因为我知道 & 运算符,但不知道取消引用运算符。
    【解决方案5】:
    • &获取对象的内存地址
    • *获取内存地址指向的对象
    • . 访问对象的成员
    • -> 从指向对象的指针访问成员

    【讨论】:

    • 感谢您的直接回答,非常感谢。很高兴看到很多人,像你一样,愿意帮助人们理解这些事情。
    猜你喜欢
    • 2013-04-26
    • 2011-05-24
    • 2016-05-18
    • 2011-10-22
    • 2012-10-06
    • 1970-01-01
    • 2015-11-07
    • 2010-12-30
    • 2019-08-29
    相关资源
    最近更新 更多