resumen por mundo linea leer ferreiro escribir emilia daniel cassany capitulos cambiante bibliografia c arrays indexing size

por - leer y escribir en un mundo cambiante bibliografia



¿Cómo podría ser posible leer y escribir más allá de la matriz (3)

Al leer y escribir más allá de la matriz, su programa invoca un comportamiento indefinido. No significa que tenga que colgarse o imprimir valores basura, puede pretender funcionar bien. Aparentemente, eso es lo que está sucediendo en este caso.

Salida del programa:

#include <stdio.h> int main() { int size; printf("Enter the size of array: "); scanf("%d",&size); int b[size],i = 0; printf("Enter %d integers to be printed: ",size); while(i++ < size) { scanf("%d",&b[i]); printf("%d %d/n", i, b[i]); } return 0; }

para size = 5 y números de entrada:

0 1 2 3 4

es

1 0 2 1 3 2 4 3 5 4

donde la primera columna es para i segunda para los elementos de la matriz b .
Está claro que i en el ciclo while(i++ < size) { incrementado a 1 antes de ingresar al ciclo. Este ciclo debería tener que almacenar / imprimir el valor en / de b[1], b[2], b[3], b[4] pero no b[5] ya que el ciclo terminará en i = 5 .
¿Cómo este código está imprimiendo el valor de b[5] ?
Lo he probado para diferentes size matriz y no está imprimiendo ningún valor de basura.


En su ciclo, la condición i < size se verifica antes de que se incremente. Pero, i se incrementa antes de ingresar al cuerpo del ciclo y no después, por lo que es posible acceder a b[5] en este caso, ya que se incrementaría después de verificar i < size con i=4 . No quieres eso, ya que esto provoca un comportamiento del programa indefinido.

Si intenta acceder a un elemento de la matriz que no existe, p. Ej. array[size] , está accediendo al siguiente punto en la memoria justo después de la matriz. En este caso, tiene suerte, pero si esto significaba que estaba accediendo a una parte de la memoria donde su programa no está permitido hacerlo, obtendría un segmentation fault .


podrías usar un ciclo for en lugar de un rato así que en lugar de while(i++<size) podrías usar for(i = 0; i < size; i++) que debería resolver tu problema, amigo mío :)