PUNTATORI
Nel linguaggio C, i puntatori sono uno degli strumenti più potenti e caratteristici. Permettono di lavorare direttamente con la memoria, offrendo un controllo molto preciso sul comportamento del programma.
COSA SONO
Un puntatore è una variabile che contiene l’indirizzo di memoria di un’altra variabile. Invece di memorizzare direttamente un valore, “punta” alla posizione in cui quel valore è salvato.
COME SI SCRIVONO
Un puntatore viene dichiarato specificando il tipo di dato a cui fa riferimento e un simbolo che indica che si tratta di un indirizzo. Questo tipo deve essere coerente con il dato a cui il puntatore si riferisce.
OPERAZIONI PERMESSE SUI PUNTATORI
Con i puntatori è possibile leggere e modificare il valore della variabile a cui fanno riferimento, oltre che eseguire operazioni aritmetiche sugli indirizzi per spostarsi in memoria. Questo è particolarmente utile quando si lavora con array o strutture dati complesse.
COME MAI SONO PERICOLOSI
I puntatori sono considerati pericolosi perché un uso scorretto può portare a errori difficili da individuare, come accessi a memoria non valida o sovrascrittura di dati importanti. Questo può causare crash del programma o comportamenti imprevedibili.
COME MAI SONO DIFFICILI (E COME CAPIRLI)
I puntatori risultano difficili perché richiedono di ragionare non solo sui valori, ma anche sugli indirizzi di memoria. Per capirli è utile visualizzare mentalmente la memoria come una serie di celle e ricordare che il puntatore contiene solo un riferimento. Con pratica ed esempi, diventano uno strumento estremamente potente e indispensabile.
CODICE
#include <stdio.h>
int main() {
int n = 3;
// tipo * -> puntatore di tipo
// int * pn = n -> non va bene perchè stiamo mettendo un intero all'interno di un puntatore a intero(miss match di tipi);
// &n estrae l'indirizzo di n ed è ideale per i puntatori
int * pn = &n;
// estrarre il valore del puntatore
int risolta = *pn;
printf("%d %d\n", n, risolta);
*pn = 4;
printf("%d %d\n", n, *pn);
// operazioni
int m = 2;
int * pm = &m;
// assegnamento tra puntatori
// pn = pm; -> non servono altri siboli!!!
// pm + 5; -> lo spostamento del puntatore di n posizioni(5)
// pm - pn; -> numero di celle tra puntatore1 e punatore2
return 0;
}