Ho esaminato la programmazione in C e ci sono solo un paio di cose che mi infastidiscono.
Prendiamo questo codice per esempio:
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 andando su uno di questi, si "riversa" sull'indirizzo di memoria successivo che fa apparire l'elemento 2 come "-2147483648" a quell'indirizzo? Ma questo non ha molto senso perché nell'output dice ancora che l'indirizzo successivo contiene il valore 4, quindi 5. Se il numero si è rovesciato sull'indirizzo successivo, non cambierebbe il valore memorizzato in quell'indirizzo ?
Ricordo vagamente di aver programmato in Assembly MIPS e guardando 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 male, ecco un'altra domanda: se il numero assegnato a un indirizzo specifico è più grande del tipo (come in myArray [2]), allora non influisce sui valori memorizzati all'indirizzo successivo?
Esempio: abbiamo int myNum = 4 miliardi all'indirizzo 0x10010000. Ovviamente 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. Corretto?
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 provare a memorizzare 4 miliardi nell'int ma apparirà come un negativo numero) e quindi non ha alcun effetto sui numeri / caratteri memorizzati al prossimo indirizzo.
Scusa se sono andato fuori bordo. Ho avuto una grande scoreggia cerebrale tutto il giorno da questo.