Как это заявление
int* p = new int[10];
p[10] = 5;
delete[] p;
отличается от этого утверждения?
int* p = new int[10];
*p = 5;
delete[] p;
Я хочу, что не так с первым кодом. Я новичок в С++, поэтому любое объяснение приветствуется. Спасибо.
В массиве размером [10]
действительные индексы от [0]
до [9]
, поэтому [10]
выходит за пределы
@rzq Для справки в будущем, этот тип вопроса получает отрицательную оценку и закрывается очень быстро, поэтому вы можете прочитать Как спросить, прежде чем задавать другой вопрос.
На самом деле стоит ответить только из-за эквивалентности p[0]
и *p
. (Ну, во всяком случае, я так думал.)
Если не очевидно, чем они отличаются, вам нужно вернуться к основам и потратить больше времени на чтение хорошей книги или учебника по C++. Быть новичком — это нормально, но если вы не проведете минимальные исследования, прежде чем задавать SO, это приведет к плохим вопросам, не относящимся к теме.
Поведение p[10]
не определено, поскольку в массиве всего 10 элементов, а первый элемент находится в позиции 0. Вы можете получить доступ к p[0]
(то же самое, что и *p
) до p[9]
включительно.
Другими словами, массивы в C++ отсчитываются от нуля. См. Фортран, например, где они однобазовые.
Что заставляет вас думать, что что-то не так с утверждением? (вы правы, что-то не так, но знание того, почему вы так думаете, без понимания проблемы, поможет нам понять, что вам объяснить)