Ho rivisto la programmazione in C e ci sono solo un paio di cose che mi danno fastidio.
Prendiamo ad esempio questo codice:
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);
So che un int può contenere un valore massimo di 2.147.483.647 positivi. Quindi superandone uno, "si riversa" sul successivo indirizzo di memoria che fa apparire l'elemento 2 come "-2147483648" a quell'indirizzo? Ma allora non ha davvero senso perché nell'output dice ancora che l'indirizzo successivo contiene il valore 4, quindi 5. Se il numero si fosse trasferito all'indirizzo successivo, allora non cambierebbe il valore memorizzato in quell'indirizzo ?
Ricordo vagamente dalla programmazione in MIPS Assembly e osservando gli indirizzi cambiare i valori durante il programma passo dopo passo che i valori assegnati a quegli indirizzi sarebbero cambiati.
A meno che non mi ricordi in modo errato, ecco un'altra domanda: se il numero assegnato a un indirizzo specifico è più grande del tipo (come in myArray [2]), non influisce sui valori memorizzati nell'indirizzo successivo?
Esempio: abbiamo int myNum = 4 miliardi all'indirizzo 0x10010000. Naturalmente myNum non può memorizzare 4 miliardi, quindi appare come un numero negativo a quell'indirizzo. Nonostante non sia in grado di memorizzare questo numero elevato, non ha alcun effetto sul valore memorizzato all'indirizzo successivo di 0x10010004. Corretta?
Gli indirizzi di memoria hanno spazio sufficiente per contenere determinate dimensioni di numeri / caratteri e se la dimensione supera il limite, verrà rappresentata in modo diverso (come tentare di archiviare 4 miliardi nell'int ma apparirà come un numero negativo) e quindi non ha alcun effetto sui numeri / caratteri memorizzati al prossimo indirizzo.
Scusa se sono andato in mare. Da questo giorno ho avuto una grande scoreggia cerebrale.
int c = INT.MAXINT; c+=1;
e vedere cosa è successo a c.