¿La matriz [-1] proporciona el último elemento de la matriz?

¿La matriz [-1] proporciona el último elemento de la matriz?

No, acceder a elementos fuera del rango del índice es un comportamiento indefinido. En su caso, el elemento en la dirección justo antes del comienzo de su matriz se establece en 27.

Dado que acceder a los elementos de la matriz en C no es más que hacer aritmética de punteros "directos", no se prohíbe pasar índices negativos. Podría construir un caso de uso legítimo donde los índices son negativos y positivos:

int raw[21], *data = &raw[10];
for (int i = -10 ; i <= 10 ; i++) {
    data[i] = i;
}

No; array[-1] no accederá al último elemento. Es más probable que la ubicación de la memoria justo antes de la matriz tenga 27 almacenado en él. Prueba esto:

array[4] = 27;
array[-1] = 0;

Luego prueba si array[-1] == array[4] . No serán iguales (asumiendo que su programa no falla al asignar a array[-1] ).


Acceder a matrices con un índice fuera de los límites no siempre bloquea su programa. Si la memoria a la que se accede mediante -1 está bajo el control de su programa, aparecerá un valor indefinido (que fue almacenado por otros datos creados por su programa). En tu caso es mera coincidencia.