【问题标题】:What exactly happens when I use * before a pointer?当我在指针前使用 * 时究竟会发生什么?
【发布时间】:2023-03-29 14:15:01
【问题描述】:

当您在对象名称之前使用 * 运算符“取消指针”访问它的指针,就好像它是一个对象一样,它到底在做什么?

我问这个是因为我有指向存储大量数据的对象的指针,我不希望 C++ 复制它或做任何昂贵的事情。我能够复制这个对象和使用其中的函数之间有一条细线。

【问题讨论】:

    标签: c++ class pointers object


    【解决方案1】:

    你会得到一个左值,它引用位于指针给定地址的对象。

    一般来说,单独取消引用指针永远不会导致复制。当获得的引用用于构造相同类型的新对象(在将值传递给函数时隐式发生)或用作赋值运算符的参数时,就会发生复制。

    【讨论】:

      【解决方案2】:

      当你取消引用一个指针时,你只是在访问它的元素;你没有复制任何东西。这两个调用做同样的事情:

      (*p).element = 1;
      p->element = 1;
      

      如果你想要一个详尽的解释;你可以看看this question

      【讨论】:

        【解决方案3】:

        '*' returns the object as an l-value this pointer is pointing。就这么简单。

        【讨论】:

          【解决方案4】:

          解引用运算符或间接运算符,用“*”表示(即 星号),是在类 C 语言中发现的一元运算符 包括指针变量。它对指针变量进行操作,并且 返回与指针地址处的值等效的左值。 这称为“取消引用”指针。

          (http://en.wikipedia.org/wiki/Dereference_operator)

          当你使用指针指向一个对象时,指针只是指向对象的地址,但它不会复制任何东西.....

          【讨论】:

            猜你喜欢
            • 2023-04-01
            • 2012-06-06
            • 1970-01-01
            • 1970-01-01
            • 2013-06-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多