0Pricing
C++ Academy · Lezione

Dereferenziazione e aritmetica dei puntatori

Legga la memoria tramite puntatori e percorra gli array con l'aritmetica dei puntatori

Dereferenziazione e aritmetica dei puntatori è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.

Lettura tramite un puntatore

L'operatore unario * legge il valore a cui punta il puntatore.

int x = 42;
int* p = &x;
std::cout << *p;   // 42

Scrittura tramite un puntatore

È anche possibile usare *p a sinistra di un'assegnazione per scrivere nel valore puntato.

*p = 100;
std::cout << x;   // 100

L'operatore freccia

Per i puntatori a struct o classi, p->member è una forma abbreviata di (*p).member. Usi la freccia: è la convenzione.

struct Point { int x, y; };
Point pt{3, 4};
Point* p = &pt;
std::cout << p->x;   // 3

Nozioni di base sull'aritmetica dei puntatori

È possibile aggiungere o sottrarre numeri interi ai puntatori. Il risultato si sposta in passi della dimensione di un elemento, non di un byte.

int a[5] = {10, 20, 30, 40, 50};
int* p = a;        // points to a[0]
p = p + 2;         // now points to a[2]
std::cout << *p;   // 30

Scorrere un array

L'aritmetica dei puntatori simula l'indicizzazione. a[i] e *(a + i) sono identici, e p[i] funziona con qualsiasi puntatore.

int a[] = {1, 2, 3, 4};
int* p = a;
for (int i = 0; i < 4; ++i) {
    std::cout << *(p + i) << " ";
}

Differenza tra due puntatori

Sottrarre due puntatori all'interno dello stesso array restituisce la distanza in elementi; il tipo è std::ptrdiff_t.

int a[5];
int* first = a;
int* last  = a + 5;
std::ptrdiff_t len = last - first;  // 5

Confrontare i puntatori

È possibile confrontare i puntatori per verificare l'uguaglianza con == e !=, e ordinarli con < solo quando puntano all'interno dello stesso array.

Iterazione con i puntatori

L'iterazione idiomatica in stile C usa due puntatori: uno all'inizio e uno alla fine.

int a[] = {1, 2, 3, 4, 5};
for (int* p = a; p != a + 5; ++p) {
    std::cout << *p << " ";
}

È consentito puntare oltre la fine

È possibile calcolare un puntatore alla posizione immediatamente successiva all'ultimo elemento (il puntatore "end"), ma dereferenziarlo produce un comportamento indefinito.

Insidie dell'aritmetica dei puntatori

Errori comuni:

  • Superare i limiti dell'array
  • Mescolare tipi di puntatore (int* + char*)
  • Dimenticare che l'aritmetica usa unità di elementi, non di byte

Preferire iteratori o intervalli

Il C++ moderno privilegia gli iteratori e la libreria ranges rispetto all'aritmetica con puntatori grezzi. I puntatori restano importanti per le API C e per il codice di livello molto basso.

Verifica rapida

Se p è un int* che punta all'inizio di un int di 4 byte, a cosa punta p + 1?

Riepilogo

*p legge o scrive il valore puntato. p->member accede a un membro di una struct. L'aritmetica dei puntatori procede per passi della dimensione di un elemento. La usi con attenzione: nel codice moderno, iteratori e intervalli sono in genere una scelta più sicura.

Domande Frequenti

La lezione «Dereferenziazione e aritmetica dei puntatori» è gratuita?

Sì — il testo completo di «Dereferenziazione e aritmetica dei puntatori» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.

Cosa imparerò in «Dereferenziazione e aritmetica dei puntatori»?

Legga la memoria tramite puntatori e percorra gli array con l'aritmetica dei puntatori Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C++ Academy?

Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Dereferenziazione e aritmetica dei puntatori»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C++ Academy?

Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Puntatori grezzi e operatore address-of
  2. Dereferenziazione e aritmetica dei puntatori
  3. nullptr e sicurezza dei puntatori nulli
  4. Quando usare puntatori o riferimenti
← Torna a C++ Academy