【问题标题】:Can someone tell me what is wrong with this statement? [closed]有人能告诉我这句话有什么问题吗? [关闭]
【发布时间】:2020-12-21 16:51:26
【问题描述】:

这个说法如何

int* p = new int[10];
p[10] = 5;
delete[] p;

这个说法不一样?

int* p = new int[10];
*p = 5;
delete[] p;

我想知道第一个代码有什么问题。我对 C++ 有点陌生,所以任何解释都值得赞赏。谢谢。

【问题讨论】:

  • 是什么让您认为该声明有问题? (你是对的,有问题,但是在不理解问题的情况下知道你为什么这么认为将有助于我们知道向你解释什么)
  • 在大小为[10] 的数组中,有效索引为[0][9],因此[10] 超出范围
  • @rzq 供将来参考,此类问题会很快被否决并关闭,因此您可能需要先阅读How to Ask,然后再提出其他问题。
  • 由于p[0]*p 的等价性,才真正值得回答。 (好吧,反正我是这么想的。)
  • 如果它们的不同之处不是很明显,您需要回到基础,花更多时间阅读一本好的 C++ 书籍或教程。成为新人很好,但在询问 SO 之前不做自己的最少研究会导致糟糕的、离题的问题。

标签: c++


【解决方案1】:

p[10] 的行为是未定义,因为数组只有 10 个元素,第一个元素位于位置 0。您可以访问 p[0](与 *p 相同)到p[9] 包括在内。

换句话说,C++ 中的数组从零开始。参照。例如,Fortran,它们是 one-based

【讨论】:

    猜你喜欢
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多