Así que configuro una matriz simple e itero a través de ella. Para cada elemento, la matriz [i] se llena con un valor de 100. Hago i <4 porque obviamente la matriz [5] no existe para una matriz DE CINCO ELEMENTOS.

Si las matrices se indexan en 0, ¿por qué el compilador NO me está volviendo loco? array [5] no debería existir ...

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
Shah Jacob 10 may. 2019 a las 01:19

4 respuestas

La mejor respuesta

Si i < 5 entonces debe ser 4 o menos, lo que significa que el máximo es array[4], que no está fuera de los límites.

Creo que debes haberlo confundido con hacer i <= 5, que también ves mucho.

3
braza 9 may. 2019 a las 22:28
int array[5];
for (int i = 0; i < 5; i++)
{
    array[i] = 100;
}

Es más o menos equivalente a

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

Entonces no hay una matriz fuera de límites en ese código.

3
john 9 may. 2019 a las 22:27

Cuando declaras int array[5];, el 5 no se refiere a ninguna indexación. Se refiere al número de elementos. Pero solo en este punto ... Cuando lo declaras. Más adelante, puede acceder a la matriz a través de los índices 0-4, que está haciendo ya que tiene i < 5.

Incluso si tuviera que acceder a array[5] no está garantizado que su compilador se asuste ... ¿Pero ese es quizás otro tema, o?

1
niCk cAMel 9 may. 2019 a las 22:31

Nunca se accede a un [5]. Has iterado solo para [0], a [1], a [2], a [3], a [4]. Por lo tanto, no arrojará ningún error. En condición de bucle, has escrito i <5 no i <= 5)

1
Sahil batra 9 may. 2019 a las 22:31