Почему я НЕ получаю ошибку массива out of bound при итерации по ней? - PullRequest
0 голосов
/ 10 мая 2019

Итак, я установил простой массив и перебрал его. Для каждого элемента массив [i] заполняется значением 100. Я делаю i <4, потому что очевидно, что массив [5] не существует для массива ПЯТИ ЭЛЕМЕНТОВ. </p>

Если индекс массива равен 0, почему компилятор НЕ волнуется из-за меня? массив [5] не должен существовать ...

using namespace std;

int main()
{
    int array[5];
    for (int i = 0; i < 5; i++)
    {
        array[i] = 100;
    }

    for (int i = 0; i < 5; i++)
    {
        cout << array[i] << "\n";
    }
}

Ответы [ 4 ]

3 голосов
/ 10 мая 2019

Если i < 5, то оно должно быть 4 или меньше, что означает максимум array[4], что не выходит за пределы.

Я думаю, вы, должно быть, путали это с выполнением i <= 5, которое вы также часто видите.

3 голосов
/ 10 мая 2019
int array[5];
for (int i = 0; i < 5; i++)
{
    array[i] = 100;
}

более или менее эквивалентно

int array[5];
array[0] = 100;
array[1] = 100;
array[2] = 100;
array[3] = 100;
array[4] = 100;

Так что в этом коде нет массива вне границ.

1 голос
/ 10 мая 2019

Когда вы объявляете int array[5];, 5 не относится ни к какой индексации. Это относится к номеру элемента. Но только в этот момент ... Когда ты это заявляешь Позже вы можете получить доступ к массиву через индексы 0-4, что вы делаете, так как у вас есть i < 5.

Даже если бы у вас был доступ к array[5], не гарантируется, что ваш компилятор взбесится ... Но это может быть другая тема, или?

1 голос
/ 10 мая 2019

Вы никогда не получаете доступ к [5].Вы выполняли итерацию только для a [0], a [1], a [2], a [3], a [4]. Так что это не вызовет никакой ошибки. В условии цикла вы написали i <5 not i <=5.</p>

...