Puntatori nel linguaggio C
Nel linguaggio C i puntatori sono variabili che contengono gli indirizzi di memoria.
Per dichiarare un puntatore nel linguaggio C indico il tipo di dato (es. int, float, char) e il nome della variabile da assegnare al puntatore anticipato dal simbolo *
int *p;
Un esempio pratico
Ad esempio, assegno un valore alla variabile prova il valore 1.
Poi dichiaro un puntatore p e gli assegno l'indirizzo di memoria della variabile prova
int main() {
int prova=1;
int *p;
p = &prova;
printf("valore di a : %d \n " , prova);
printf("valore di *p : %p \n",p);
}
Se l'indirizzo di memoria è 0x7ffecb9ebfdc allora anche il contenuto del puntatore è 0x7ffecb9ebfdc.
valore di a: 1
valore di *p: 0x7ffecb9ebfdc
Ovviamente la variabile p si trova in un altro indirizzo di memoria. Ad esempio, in 0x7ffda82526d0.
Posso assegnare lo stesso indirizzo di memoria a più puntatori.
In questo caso si parla di puntatori multipli
int prova=1;
int *p;
int *q;
p = &prova;
q = &prova;
Come modificare il valore della variabile tramite i puntatori
Tramite il puntatore posso anche modificare il valore della variabile puntata usando la sintassi *p=valore
Ad esempio, riscrivo il programma om questo modo
int main() {
int prova=1;
int *p;
p = &prova;
*p=2;
printf("valore di a : %d \n " , prova);
}
Ora l'output del programma è due perché il puntatore ha cambiato il valore assegnato alla variabile prova tramite l'istruzione *p=2.
valore di a : 2
Posso anche incrementare (o decrementare) il valore della variabile puntata.
int main() {
int prova=1;
int *p;
p = &prova;
*p+=5;
printf("valore di a : %d \n " , prova);
}
Per quanto riguarda l'incremento unitario con i simboli ++ (oppure --) è necessario porre il puntatore *p tra parentesi
int main() {
int prova=1;
int *p;
p = &prova;
(*p)++;
printf("valore di a : %d \n " , prova);
}
Come azzerare il puntatore
Per eliminare il contenuto del puntatore
*p=NULL
Dove NULL è una costante contenuta nel modulo stdio.h
E così via