Vai al contenuto
eLearner.app
Modulo 5 · Lezione 2 di 212/18 nel corso~15 min
Lezioni del modulo (2/2)

Puntatori

I puntatori sono una delle caratteristiche più potenti e distintive del C++. Permettono di accedere direttamente alla memoria fisica del computer, consentendo una gestione efficiente delle risorse e prestazioni elevate.


1. Cos'è la Memoria e un Indirizzo?

Ogni variabile che dichiari nel tuo programma viene memorizzata in una cella della memoria RAM. Ogni cella ha un indirizzo di memoria univoco (solitamente espresso in formato esadecimale, es. 0x7ffee3bf87ac).

C++ ci permette di ottenere l'indirizzo di memoria di qualsiasi variabile usando l'operatore di indirizzo &:

Code
int x = 42;
std::cout << &x; // Stampa l'indirizzo di memoria di x (es. 0x7ffee3bf87ac)

2. Definizione di Puntatore

Un puntatore è una variabile speciale che memorizza come valore l'indirizzo di memoria di un'altra variabile.

La sintassi prevede l'uso dell'asterisco * dopo il tipo di dato:

Code
int x = 42;
int* ptr = &x; // ptr è un puntatore a intero che contiene l'indirizzo di x

3. L'Operatore di Dereferenziazione (*)

Per accedere o modificare il valore memorizzato all'indirizzo a cui punta un puntatore, utilizziamo l'operatore di dereferenziazione (o indirezione), anch'esso rappresentato dal simbolo *:

Code
int x = 42;
int* ptr = &x;

std::cout << *ptr; // Stampa 42 (il valore a cui punta ptr)

*ptr = 100; // Modifica il valore di x tramite il puntatore
std::cout << x;    // Ora stampa 100!

4. Puntatori Nulli: nullptr

Un puntatore che non punta a nessun indirizzo valido deve essere inizializzato con la parola chiave nullptr (introdotta in C++11):

Code
int* ptr = nullptr; // Puntatore nullo e sicuro

Prova tu

Esercizio#cpp.m5.l2.e1
Tentativi: 0Caricamento…

Nel main è presente una variabile value inizializzata a 42. Dichiara un puntatore a intero ptr che punta all'indirizzo di value. Utilizza la dereferenziazione di ptr per impostare il valore di value a 100, infine stampa value usando std::cout.

Caricamento editor…
Mostra suggerimento

Dichiara il puntatore con `int* ptr = &value;`, modifica il valore dereferenziando `*ptr = 100;`, e stampa `std::cout << value;`.

Soluzione disponibile dopo 3 tentativi

Esercizio#cpp.m5.l2.e2
Tentativi: 0Caricamento…

Definisci una funzione doubleValue che accetta un puntatore a intero (int* ptr) e moltiplica per 2 il valore a cui punta (se il puntatore non è nullo). Nel main, chiama doubleValue passandole l'indirizzo della variabile num e stampala.

Caricamento editor…
Mostra suggerimento

La funzione deve accettare `int* ptr`. All'interno, usa `*ptr = (_ptr) _ 2`. Nel main chiamala con `doubleValue(&num);`.

Soluzione disponibile dopo 3 tentativi

Quiz#cpp.m5.l2.q1
Pronto

Dato il codice riportato, quale espressione permette di modificare direttamente il valore di a impostandolo a 10?

Code
int a = 5;
int* p = &a;
// quale istruzione assegna 10 ad a?
Opzioni di risposta