Consulta en arreglos c

   int a[2]={1210,15};

    printf("%d",a[33] );

SALIDA

1073828132

¿Por qué no arroja un error cuando intento imprimir? a[33] aunque el elemento de la matriz no existe

preguntado el 03 de mayo de 12 a las 12:05

2 Respuestas

Porque C no verifica los límites.

Simplemente estará leyendo una ubicación arbitraria en su pila de llamadas.

contestado el 03 de mayo de 12 a las 12:05

Probablemente también debería tener en cuenta el hecho de que esto es cierto, pero no está recibiendo un SEGFAULT porque la memoria que está aprovechando todavía es parte de la pila de su aplicación. - Ricardo J. Ross III

Las matrices en C son solo una especie de azúcar sintáctico alrededor de los punteros.

int a[2] crea el espacio para, e inicializa, una matriz de 2 int.

Pero a[33] es de hecho *(a + 33), con a solo un int * apuntando al primer elemento de a. Al desreferenciar la matriz, a C no le importa el tamaño con el que se inicializó la matriz.

contestado el 03 de mayo de 12 a las 12:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.