Ciao e bentornato.
In questa lezione, voglio parlare del modificatore const e di come
lo usiamo con i puntatori.
Abbiamo appreso delle continue lezioni precedenti.
Significa solo che non puoi modificare il valore di una variabile. Ma cosa significa quando lo applichiamo a un puntatore?
Quindi, quando usiamo il modificatore const in una variabile o
in un array, dice al compilatore che il contenuto della variabile array non verrà modificato dal programma.
L'alternativa era creare istruzioni di definizione dal preprocessore, ma const
di solito è un modo migliore per farlo.
Con i puntatori, dobbiamo considerare due cose quando si usa un modificatore const.
Stiamo effettivamente dicendo che il puntatore non può essere cambiato?
O stiamo dicendo che il valore a cui punta il puntatore non può essere modificato?
Perché ricorda che un puntatore contiene un valore di un indirizzo.
E potremmo non voler cambiare mai quell'indirizzo.
Oppure potremmo non voler cambiare il valore a cui punta il punto.
In entrambi i casi, dobbiamo essere specifici nella nostra sintassi.
Quindi puoi usare la parola chiave const quando dichiari un puntatore per indicare che il valore
puntato non deve essere modificato.
Il modo in cui fornisci questo e di nuovo in
modo che il puntatore sia un valore poiché un valore ha un indirizzo.
Ciò a cui punta è il valore di quell'indirizzo.
Se vuoi che ciò non cambi, faresti
qualcosa del genere.
Diresti quando dichiari il puntatore di inserire l'asterisco nel modificatore
della costante prima del tipo.
Quindi diresti costante qualunque sia il tipo che il tuo puntatore è puntatore asterisco.
Quindi questo è effettivamente deformato definendo un puntatore a
una costante.
Non saremo in grado di cambiare 999l.
Quindi dichiariamo che il valore puntato dal valore p è costante.
Il compilatore verificherà la presenza di eventuali istruzioni che tentano di modificare il valore puntato da pvalue.
E se c'è qualcuno che lo fa nel programma, genererà un errore.
Quindi questa è la sintassi. Ancora una volta quello che
vuoi notare qui è che const è la
prima parola, ed è prima del tipo. Quindi questo sta dicendo che il valore che
punta non può cambiare.
Quindi, se provi a fare qualcosa del genere su pvalue, provi ad
assegnare un valore a ciò a cui punta perché vedi
l'operatore di riferimento indiretto lì. Ciò significa che stiamo assegnando un valore
a ciò a cui stiamo puntando. Se proviamo a
farlo, darà un errore perché non possiamo cambiare
quel valore, non possiamo cambiare 999l in 888l.
Quindi ora che dire dei puntatori alle costanti.
E nella dichiarazione precedente, abbiamo creato
il puntatore a cui punta il punto non può cambiare.
Ma possiamo ancora cambiare il valore effettivo della variabile che abbiamo dichiarato.
Quindi saremmo ancora in grado di modificare il valore lungo.
Non possiamo cambiare il valore p della stella.
Ma il valore lungo non è definito come una costante, è semplicemente definito come valore lungo.
Quindi possiamo ancora modificare il puntatore del valore intero
perché non è stata applicata una costante.
Abbiamo applicato solo la costante al puntatore. Quindi possiamo dire che il valore è 777l.
Il valore puntato è cambiato, ma non hai utilizzato il puntatore per apportare la modifica.
Anche il puntatore stesso non è una costante.
Il puntatore ricorda contiene un indirizzo.
Non abbiamo dichiarato che il puntatore è una costante. Quindi possiamo ancora cambiare anche
Quello a cui punta il puntatore è costante. questo. Se abbiamo dichiarato una nuova variabile chiamata numero, possiamo dire che
il valore p è uguale all'indirizzo di quel numero.
Va benissimo perché stiamo cambiando l'indirizzo del valore del puntatore.
Non stiamo cambiando il valore di ciò a cui puntava il puntatore.
Quindi comprendi questa distinzione, cambiando il valore del
puntatore, che è solo
un indirizzo o cambiando ciò a cui punta il puntatore.
Se non vuoi cambiare ciò a cui
punta il puntatore, const deve essere la prima parola chiave nella dichiarazione del puntatore stesso.
Quindi, di nuovo, in questo esempio, cambieremo l'indirizzo memorizzato nel valore p in modo che punti a un numero.
Non è ancora possibile utilizzare il puntatore per modificare il valore memorizzato perché è stato
dichiarato poiché non è possibile modificare tale valore.
Puoi modificare l'indirizzo memorizzato nel puntatore quanto vuoi, proprio come abbiamo fatto noi.
L'uso del puntatore per modificare il valore puntato non è
consentito anche dopo aver modificato l'indirizzo memorizzato nel puntatore.
Quindi, anche se l'abbiamo appena cambiato in
numero lungo, il puntatore aveva ancora una costante come parola chiave.
Quindi non possiamo modificare il valore indipendentemente da ciò a cui punta il puntatore.
Che dire di non permettere che l'indirizzo del puntatore
cambi, il valore che è nel puntatore.
Quindi potresti anche voler assicurarti che l'indirizzo memorizzato nel puntatore non possa essere modificato.
Puoi farlo usando la parola chiave costante nella
dichiarazione del puntatore allo stesso modo, ma è leggermente diverso.
Invece di avere const come prima parola chiave,
la metti dopo il tipo di dati e dopo l'asterisco.
Ciò significa che il puntatore stesso non può modificare il suo valore.
Se lo metti prima dell'int, stai dicendo che il valore puntato dal puntatore non può cambiare.
Quindi, quando si esegue questa operazione, si assicura che il puntatore punti sempre alla stessa cosa.
L'indirizzo non cambierà mai.
Il compilatore verificherà che non
si inverta il tentativo di cambiare il puntatore altrove nel codice.
Non puoi modificare questo indirizzo.
Quindi, se provassi a dire p count è uguale a item, otterrai un errore.
Perché questo può puntare solo all'indirizzo di conteggio.
Si tratta di dove posizionare la parola chiave costante se si desidera modificare.
Se non si desidera consentire la modifica del puntatore al puntatore o
se non si consente la modifica dell'indirizzo del puntatore.
Costante come prima parola chiave non consente di modificare il valore dei puntatori che puntano a.
Se metti la costante dopo il tipo di dati nella stella, significa
che l'indirizzo del puntatore non può cambiare.
Quindi è molto da prendere e questo è molto confuso, quindi studia quello che ho appena detto.
Comprendi questa sintassi, è molto importante ed
è molto complicata. Può essere molto facilmente
commettere quell'errore. Quindi comprendi la differenza.
Puoi ancora cambiare il valore
che p count punta usando p count, proprio come avremmo potuto in quello precedente. Poiché p count è, anche se assegniamo non possiamo
assegnare un nuovo indirizzo, possiamo
comunque modificare il valore a cui punta.
Quindi possiamo de-referenziarlo e cambiarlo in questo modo. Possiamo dire che il conteggio della stella p è uguale a 345, va bene.
Fa riferimento al valore memorizzato in count tramite il puntatore e cambia il valore in 345.
Puoi creare un puntatore costante che punta a un valore che è
anche una costante, quindi potresti fare qualcosa del genere, costante in
stella, elemento p costante.
E questo significa che ciò a cui punta il valore
è costante e il puntatore stesso è una costante.
Quindi p item è un puntatore costante a una costante, quindi tutto è fisso.
Non è possibile modificare l'indirizzo memorizzato in p item e non è possibile
utilizzare p item per modificare ciò a cui punta.
Tuttavia, potresti comunque cambiare l'elemento.
L'articolo non è una costante, quindi puoi cambiare elemento.
È possibile modificare direttamente il valore.
Se vuoi assicurarti che non sia cambiato nulla, dovresti
effettivamente creare anche la variabile item int come costante.
E poi questo direbbe che non cambierà mai.
Ma ricorda la differenza qui tra
puntatori costanti e valori costanti a cui punta il puntatore.
Puoi usare entrambi. Puoi usare l'uno o l'altro.
Se vuoi assicurarti che
tutto sia costante, assicurati che anche quello che stai indicando a quella variabile sia costante. Grazie.