Al hacer "array[ x ]", accedes a la posición X en memoria. Ese X es un entero, que puede ser una constante, una variable, o el retorno de una función, mientras sea un entero.
También puedes crear un array de tamaño dinámico así:
Código
Como dato:
Código
int array[5]; *(array + 2*sizeof(int)) == array[2];
Tengo dificultades para comprenderlo la verdad, si no hay ninguna posicion que se llame indice por ejemplo porque no existe, entonces que pinta el array ?
Visto lo anterior, verás que, al acceder a una posición de memoria inexistente, 1 de 2: o da error, o muestra/sobreescribe memoria que tendrá valores teóricamente desconocidos.