Puntatori nulli
Fa parte della sezione Logica e flusso del percorso C++ di Coddy. Lezione 4 di 56.
Quando dichiari un puntatore, non punta automaticamente a nulla di significativo. Un puntatore non inizializzato contiene indirizzi di memoria casuali, che possono causare errori gravi se provi a usarlo. È qui che i puntatori null diventano essenziali per una programmazione sicura.
Un puntatore nullo è un puntatore che punta esplicitamente a nulla. In C++ moderno, crei un puntatore nullo inizializzandolo con nullptr:
int* ptr = nullptr; // ptr è ora un puntatore nulloLa parola chiave nullptr indica che il puntatore non punta ad alcuna posizione di memoria valida. Questo è molto più sicuro che lasciare un puntatore non inizializzato, perché puoi verificare se un puntatore è null prima di tentare di dereferenziarlo.
Prima di usare un puntatore, dovresti verificare che non sia null usando una semplice istruzione if:
if (ptr != nullptr) {
// È sicuro usare *ptr qui
int value = *ptr;
}Questa pratica impedisce al tuo programma di arrestarsi in modo anomalo a causa dell’accesso a posizioni di memoria non valide. Inizializza sempre i puntatori a nullptr quando li dichiari e verifica che non siano null prima di dereferenziarli.
Sfida
FacileCrea un programma che dimostri l'uso sicuro dei puntatori controllando che non siano nulli prima di dereferenziarli.
Verrà fornito il seguente input:
- Una stringa che sarà
"valid"oppure"null"
Il tuo programma dovrebbe:
- Dichiarare una variabile intera denominata
datae inizializzarla con il valore42 - Dichiarare un puntatore denominato
ptr - Se l'input è
"valid", assegnare l'indirizzo didataaptr - Se l'input è
"null", assegnarenullptraptr - Usare un'istruzione if per controllare che
ptrnon sia nullo prima di tentare di usarlo - Se il puntatore non è nullo, stampare il valore a cui punta
- Se il puntatore è nullo, stampare un messaggio di sicurezza
Usa il seguente formato di output esatto:
Value: [value]Per i puntatori nulli, usa questo formato:
Pointer is null - cannot dereferenceProvalo tu
#include <iostream>
#include <string>
using namespace std;
int main() {
// Leggi input
string input;
cin >> input;
// Dichiara la variabile data
int data = 42;
// TODO: Scrivi qui il tuo codice
// - Dichiara un puntatore chiamato ptr
// - Controlla input e assegna il valore appropriato a ptr
// - Usa un'istruzione if per controllare e usare il puntatore in modo sicuro
return 0;
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Puntatori e memoria
Che cos'è un puntatore?Operatore indirizzoOperatore di dereferenziazionePuntatori nulliPuntatori e arrayMemoria dinamica con 'new'Liberare la memoria con 'delete'Riepilogo - Esercizi sui puntatori2Vettori (array dinamici)
Introduzione a std::vectorCreare un vettoreAggiungere elementiAccedere agli elementiDimensione del vettoreIterare con un ciclo forCiclo for basato su intervalloRimuovere elementiRiepilogo - Operazioni sui vettori5Progetto: strumento per l’inventario
Configurazione del progettoAggiunta e aggiornamento degli articoli3Progetto: Strumento per l’elenco delle attività
Panoramica del progettoAggiungere un’attivitàEsercitati da solo: Compilatore C++ online