I puntatori sono una delle caratteristiche fondamentali del linguaggio C e C++. Un puntatore è una variabile che memorizza l’indirizzo di memoria di un’altra variabile. Capire i puntatori significa capire come i dati vengono gestiti in memoria.
1️⃣ Cos’è un puntatore
Ogni variabile in C++ è salvata in una certa posizione di memoria, identificata da un indirizzo. Un puntatore è una variabile che contiene proprio questo indirizzo.
int x = 10; // variabile normale
int* p; // dichiarazione di un puntatore a int
p = &x; // p contiene l indirizzo di x
✅ In questo esempio:
xè una variabile intera con valore 10.&xè l indirizzo di memoria dix.pè un puntatore che contiene&x.
2️⃣ Operatori & e *
Due operatori sono fondamentali per usare i puntatori:
- & (“address of”) → restituisce l indirizzo di una variabile.
- * (“dereference”) → accede al valore contenuto nell indirizzo puntato.
int x = 10;
int* p = &x; // p punta a x
cout << "Valore di x: " << x << endl;
cout << "Indirizzo di x: " << &x << endl;
cout << "Contenuto di p (indirizzo di x): " << p << endl;
cout << "Valore puntato da p: " << *p << endl;
✅ Output tipico:
Valore di x: 10
Indirizzo di x: 0x61ff0c
Contenuto di p: 0x61ff0c
Valore puntato da p: 10
Nota che *p accede al valore della variabile a cui p punta, in questo caso x.
3️⃣ Puntatori e modifica indiretta
Una volta che un puntatore “punta” a una variabile, possiamo modificarne il valore indirettamente:
int x = 10;
int* p = &x;
*p = 25; // modifica x attraverso il puntatore
cout << "Nuovo valore di x: " << x;
✅ Output:
Nuovo valore di x: 25
4️⃣ Rappresentazione grafica
Possiamo immaginare la memoria così:
| Variabile | Contenuto | Indirizzo |
|---|---|---|
| x | 25 | 0x61ff0c |
| p | 0x61ff0c | 0x61ff08 |
Il puntatore p contiene l indirizzo di x.
Usando *p accediamo al contenuto di quell indirizzo (cioè a x).
5️⃣ Dichiarazione di più puntatori
int *p1, *p2; // due puntatori a int
float *pf; // puntatore a float
char *pc; // puntatore a char
⚠️ Attenzione: l’asterisco va scritto vicino al tipo (int*), non solo alla variabile, per chiarezza.
LABORATORIO
Creiamo il nostro primo puntatore
In questo laboratorio imparerai a dichiarare un puntatore, assegnargli l indirizzo di una variabile, e usare gli operatori & e * per accedere ai valori.
- Ambiente di sviluppo C++ (Code::Blocks, Dev-C++ o Visual Studio Code)
- Console di output per visualizzare gli indirizzi
1 Dichiarazione e inizializzazione
Dichiara una variabile intera e un puntatore a int. Assegna al puntatore l indirizzo della variabile.
int numero = 5;
int* ptr = №
2 Stampa di valore e indirizzo
Stampa a video sia il valore della variabile che il suo indirizzo.
cout << "Valore: " << numero << endl;
cout << "Indirizzo di numero: " << &numero << endl;
cout << "Contenuto del puntatore: " << ptr << endl;
cout << "Valore puntato da ptr: " << *ptr << endl;
3 Modifica tramite puntatore
Assegna un nuovo valore alla variabile usando il puntatore.
*ptr = 100;
cout << "Nuovo valore di numero: " << numero;
4 Esercizi aggiuntivi
- Dichiara due variabili e un puntatore: prova a puntare alternativamente all’una e all’altra.
- Prova a stampare i valori prima e dopo una modifica indiretta.
- Dichiara un puntatore a
floate assegna il valore di una variabile reale.