【问题标题】:O* p = new O[5]; What does p point to?O* p = 新 O[5]; p 指的是什么?
【发布时间】:2011-03-16 12:21:26
【问题描述】:

到数组的第一个O?

【问题讨论】:

    标签: c++ arrays memory-management dynamic-memory-allocation dynamic-arrays


    【解决方案1】:

    *p 指向第一个元素 p[0]。

    【讨论】:

      【解决方案2】:

      没错。 *pp[0] 是一样的。以下是您想了解的一些简洁功能:

      • “指针表示法”一般是指使用“解引用”(或“间接”)运算符
      • “数组表示法”一般是指使用括号和偏移值

      您可以互换地表示内存中的地址:

      • *p 等价于 p[0]
      • *(p+1) 等价于p[1],更厉害的是还等价于1[p]

      注意

      • 正如另一个回复中指出的,一般形式是*(p+i) 等价于p[i]
      • 另外,请不要使用i[p]

      【讨论】:

      • 我不认为允许 '1[p]' 的语法很糟糕。我认为该语言对于初学者来说已经足够混乱了,我们不需要指出语言的黑暗角落(随着人变得更好,它们会被发现)。
      • 我同意你关于语言令人困惑的观点,但我认为这一点“很棒”的原因是它隐含地为我们提供了关于语言规范的有趣信息。我认为理解数组表示法只是指针算术被忽略了。如果一个人知道指针算法(交换属性成立)并意识到语法允许i[p]。然后可以得出这两个“符号”在某些方面与编译器相同——太棒了!
      • +1 表示多于一句话的答案。 -1.9 用于提及 1[p] 可憎。净 0(我四舍五入)。
      【解决方案3】:

      p 包含数组的第一个 O 的地址。

      索引是这样发生的:

      p[i] = *(p+i); //note the pointer arithmetic
      

      【讨论】:

        【解决方案4】:

        正确 - *p 等同于 p[0]

        【讨论】:

          【解决方案5】:

          是的。

          【讨论】:

            猜你喜欢
            • 2021-12-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-20
            • 2022-12-31
            • 1970-01-01
            • 2021-07-24
            • 2023-01-28
            相关资源
            最近更新 更多