L'uso di const con un puntatore può rendere il puntatore non modificabile mediante il dereferenziamento utilizzando il puntatore in questione. Ma perché non posso modificare ciò a cui il puntatore non punta direttamente?const e puntatori in C
Ad esempio:
int a = 3;
const int* ptr = &a;
*ptr = 5;
non verrà compilato. Ma perché
*(ptr + 2) = 5;
anche non compilare? Non sto cambiando ciò a cui punta il puntatore.
Quindi dobbiamo dire che l'uso di const con un puntatore in questo modo non solo rende non modificabile ciò a cui punta il puntatore (dereferenziando il puntatore) ma anche qualcos'altro, a cui l'indirizzo si ottiene usando il puntatore?
So che nell'esempio sto tentando di accedere alla memoria non allocata, ma questo è solo per motivi di discussione.
Quindi ti aspettavi che il compilatore assumesse che solo i primi 'sizeof (int)' byte sono 'const'? Ha più senso che il compilatore assumerà che qualsiasi indirizzo di memoria a cui si accede con 'ptr' è un indirizzo di sola lettura (" fisicamente "di sola lettura, o almeno di sola lettura nella" prospettiva "della funzione che usa' ptr '). –