Ho una struttura che contiene alcuni puntatori. Voglio che il valore di questi non sia modificabile. Ma semplicemente scrivere const infront non rende i membri della struct immutabilicorrettezza costante per le strutture con i puntatori
typedef struct{
int *x;
int *y;
}point;
void get(const point *p,int x, int y){
p->x[0]=x;//<- this should not be allowed
p->y[0]=y;//<- this should not be allowed
}
Qualcuno può indicarmi la giusta direzione.
EDIT:
Quindi sembrerebbe che non esiste un modo semplice di utilizzare il prototipo di funzione per dire che tutto ciò che appartiene alla struct dovrebbe essere immodificabile
Cosa vuoi immodificabile? Il puntatore a 'int's? Quindi 'const int * x;' significa che non puoi modificare il valore puntato attraverso quel puntatore. I puntatori? Quindi 'int * const x;' vieta di modificare i puntatori. –
Se int * x, è un array, quindi voglio che i valori all'interno di questo array non siano modificabili. – monkeyking
Quindi hai bisogno di 'const int * x;' nella definizione della struct. Si noti che i valori nella matrice possono ancora essere modificati tramite altri puntatori (che possono richiamare un comportamento non definito, se 'x' punta a un elemento di' const int arr [3] = {15, 7, 3}; o così via) . –