【问题标题】:dereference a pointer -vs- &-operator取消引用指针 -vs- &-operator
【发布时间】:2012-04-19 03:25:23
【问题描述】:

这两个任务是等价的,即执行完全相同的事情吗?

*pointer = object

pointer = &object

,其中指针是指向“对象实例”的指针。

或者这是否只对原始类型有意义。

【问题讨论】:

  • 它们绝对是非常不同的。你必须阅读更多(和实验)关于指针的内容。
  • 如果你拿出一支铅笔和一些纸,然后用方框和箭头会发生什么,这是更容易理解的事情之一。 IMO、铅笔和纸是解决大多数指针相关问题的最佳工具。
  • 是的,你是对的。我想应该在发布之前考虑一下。不过感谢您的提示!
  • 作为布尔表达式,*pointer == objectpointer == &object 非常相似。解释那里的任何差异可能是一个很好的练习。

标签: c++ c pointers dereference


【解决方案1】:

不,这些不相等。第一个使指针的目标值等于右侧的对象。第二个更改指针本身,使其指向右侧的对象。

也就是说,在第一个之后,内存中有两个对象的值等于object 的值。在第二个之后,只有一个具有该值的对象,另外还有一个指向该对象的指针。

【讨论】:

    【解决方案2】:

    没有。

    您的第一个表达式将对象的值分配给指针。

    假设你的指针变量指向 0x1234。第一次赋值后,地址 0x1234 将包含值“object”。

    而第二次赋值将使指针指向对象的地址。

    如果你在第一个赋值指针之后改变值对象不会注意到任何东西。

    where作为第二次赋值,如果改变object的值,可以通过

    *pointer. 
    

    【讨论】:

      【解决方案3】:

      不,这些不一样。

      pointer = &object 设置pointer 使其指向object

      *pointer = objectpointer 指向的事物的值设置为等于object 的值。

      【讨论】:

        【解决方案4】:

        绝对不是。

        *pointer = object
        

        改变指针指向的内存。

        pointer = &object
        

        改变指针。

        pointer   ---->    object1
        &object   ---->    object
        

        在第一种情况下,变成:

        pointer   ---->    object
        &object   ---->    object   
        

        第二种情况:

                          ---->    object1 //could turn into a memory leak
        &object, pointer  ---->    object
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-20
          • 2019-05-20
          • 1970-01-01
          相关资源
          最近更新 更多