I puntatori sono potenti funzionalità della programmazione C e C ++. Prima di imparare i puntatori, impariamo gli indirizzi nella programmazione C.
Indirizzo in C
Se hai una variabile var nel tuo programma, &var
ti fornirà il suo indirizzo in memoria.
Abbiamo utilizzato lindirizzo numerose volte durante lutilizzo della funzione scanf()
.
Qui, il valore inserito dallutente viene memorizzato nellindirizzo della variabile var. Facciamo un esempio funzionante.
Risultato
var: 5 address of var: 2686778
Nota: probabilmente otterrai un indirizzo diverso quando esegui il codice precedente.
C Puntatori
I puntatori (variabili puntatore) sono variabili speciali che vengono utilizzate per memorizzare indirizzi piuttosto che valori.
Sintassi puntatore
Ecco come possiamo dichiarare i puntatori.
Qui abbiamo dichiarato un puntatore p di tipo int
.
Tu può anche dichiarare i puntatori in questi modi.
Prendiamo un altro esempio di dichiarazione di puntatori.
Qui abbiamo dichiarato un puntatore p1 e una normale variabile p2.
Assegnazione di indirizzi ai puntatori
Facciamo un esempio.
Qui, 5 è assegnato alla variabile c. Inoltre, lindirizzo di c è assegnato al puntatore del PC.
Ottieni il valore della cosa puntata dai puntatori
Per ottenere il valore della cosa puntata dai puntatori, usiamo *
operatore. Ad esempio:
Qui, lindirizzo di c
è assegnato al puntatore del PC. Per ottenere il valore memorizzato in quellindirizzo, abbiamo utilizzato * pc.
Nota: nellesempio precedente, pc è un puntatore, non *pc
. Non puoi e non dovresti fare qualcosa come *pc = &c
;
A proposito, *
è chiamato operatore di dereferenziazione ( quando si lavora con i puntatori). Funziona su un puntatore e fornisce il valore memorizzato in quel puntatore.
Modifica del valore puntato dai puntatori
Facciamo un esempio.
Abbiamo assegnato lindirizzo di c al puntatore del pc.
Quindi, abbiamo cambiato il valore di c in 1. Poiché pc e lindirizzo di c è lo stesso, *pc
ci fornisce 1.
Facciamo un altro esempio.
Abbiamo assegnato lindirizzo di c al puntatore del PC.
Quindi, abbiamo cambiato *pc
in 1 utilizzando *pc = 1;
. Poiché pc e lindirizzo di c sono gli stessi, c sarà uguale a 1.
Facciamo un altro esempio.
Inizialmente, lindirizzo di c viene assegnato al puntatore del PC utilizzando pc = &c;
. Poiché c è 5, *pc
ci dà 5.
Quindi, lindirizzo di d viene assegnato al puntatore del PC utilizzando pc = &d;
. Poiché d è -15, *pc
ci fornisce -15 .
Esempio: utilizzo di puntatori
Facciamo un esempio funzionante.
Risultato
Address of c: 2686784Value of c: 22Address of pointer pc: 2686784Content of pointer pc: 22Address of pointer pc: 2686784Content of pointer pc: 11Address of c: 2686784Value of c: 2
Spiegazione del programma
-
int* pc, c;
Qui , vengono creati un puntatore pc e una normale variabile c, entrambi di tipoint
.
Poiché pc e c non sono inizializzati inizialmente, il puntatore pc punta a nessun indirizzo o un indirizzo casuale. Inoltre, la variabile c ha un indirizzo ma contiene un valore di immondizia casuale. -
c = 22;
Assegna 22 alla variabile c. Cioè, 22 è archiviato nella posizione di memoria della variabile c. -
pc = &c;
Questo assegna lindirizzo della variabile c al puntatore pc. -
c = 11;
Questo assegna 11 alla variabile c. -
*pc = 2;
Questo cambia il valore nella posizione di memoria puntata dal puntatore pc a 2.
Errori comuni quando si lavora con i puntatori
Supponiamo che tu voglia che il puntatore pc faccia indicare lindirizzo di c. Quindi,
Ecco un esempio di sintassi del puntatore che i principianti trovano spesso confuso.
Perché non abbiamo ricevuto un errore quando utilizzando int *p = &c;
?
È perché
è equivalente a
In entrambi i casi, stiamo creando un puntatore p
(non *p
) e assegnandovi &c
.
Per evitare questa confusione, possiamo usare laffermazione come questa:
Ora che sai cosa sono i puntatori, imparerai come i puntatori sono correlati agli array nel prossimo tutorial.