He estado revisando la programación en C y solo hay un par de cosas que me molestan.
Tomemos este código por ejemplo:
int myArray[5] = {1, 2, 2147483648, 4, 5};
int* ptr = myArray;
int i;
for(i=0; i<5; i++, ptr++)
printf("\n Element %d holds %d at address %p", i, myArray[i], ptr);
Sé que un int puede tener un valor máximo de 2,147,483,647 positivo. Entonces, al pasar por eso, ¿se "desborda" a la siguiente dirección de memoria, lo que hace que el elemento 2 aparezca como "-2147483648" en esa dirección? Pero eso no tiene sentido porque en la salida todavía dice que la siguiente dirección tiene el valor 4, luego 5. Si el número se hubiera extendido a la siguiente dirección, ¿no cambiaría eso el valor almacenado en esa dirección? ?
Recuerdo vagamente de la programación en MIPS Assembly y viendo las direcciones cambiar los valores durante el programa paso a paso que los valores asignados a esas direcciones cambiarían.
A menos que recuerde incorrectamente, aquí hay otra pregunta: si el número asignado a una dirección específica es mayor que el tipo (como en myArray [2]), ¿no afecta a los valores almacenados en la dirección posterior?
Ejemplo: tenemos int myNum = 4 mil millones en la dirección 0x10010000. Por supuesto, myNum no puede almacenar 4 mil millones, por lo que aparece como un número negativo en esa dirección. A pesar de no poder almacenar este gran número, no tiene ningún efecto sobre el valor almacenado en la dirección posterior de 0x10010004. ¿Correcto?
Las direcciones de memoria solo tienen suficiente espacio para contener ciertos tamaños de números / caracteres, y si el tamaño supera el límite, entonces se representará de manera diferente (como tratar de almacenar 4 mil millones en el int pero aparecerá como un número negativo) y por lo que no tiene efecto en los números / caracteres almacenados en la siguiente dirección.
Lo siento si me fui por la borda. He tenido un gran pedo cerebral todo el día debido a esto.
int c = INT.MAXINT; c+=1;
y veo qué pasó con c.