Menu
Coddy logo textTech

Puntatori NULL

Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 5 di 63.

A volte devi dichiarare un puntatore, ma non hai subito un indirizzo di memoria valido da assegnargli. In queste situazioni, è importante inizializzare il puntatore con un valore speciale chiamato NULL.

Un puntatore NULL è un puntatore che non punta a nessun indirizzo di memoria valido. In C, NULL è tipicamente definito come 0 o (void*)0. Quando inizializzi un puntatore a NULL, stai dichiarando esplicitamente che al momento non punta a nulla di utile.

int *ptr = NULL;    // Inizializza il puntatore a NULL
printf("%p", ptr);  // Questo stamperà 0 o (nil)

Inizializzare i puntatori a NULL è considerata una buona pratica di programmazione perché impedisce al puntatore di contenere valori casuali spazzatura. Un puntatore non inizializzato potrebbe contenere un indirizzo di memoria casuale qualsiasi, il che potrebbe causare un comportamento imprevedibile se provi accidentalmente a usarlo.

Puoi controllare se un puntatore è NULL prima di usarlo: questo aiuta a prevenire gli arresti anomali e rende il tuo codice più robusto. Questo controllo di sicurezza diventa particolarmente importante man mano che i tuoi programmi diventano più complessi.

challenge icon

Sfida

Facile

Scrivi un programma in C che dimostri la corretta inizializzazione e verifica dei puntatori NULL. Il programma dovrebbe:

  1. Dichiarare un puntatore a un intero chiamato safe_ptr e inizializzarlo a NULL
  2. Dichiarare un puntatore a un carattere chiamato char_ptr e inizializzarlo a NULL
  3. Verificare se safe_ptr è NULL usando un'istruzione if e stampare "safe_ptr is NULL" se lo è
  4. Verificare se char_ptr è NULL usando un'istruzione if e stampare "char_ptr is NULL" se lo è
  5. Stampare l'indirizzo di memoria memorizzato in safe_ptr usando printf con lo specificatore di formato %p
  6. Stampare l'indirizzo di memoria memorizzato in char_ptr usando printf con lo specificatore di formato %p

L'output dovrebbe mostrare i risultati nel seguente formato:

safe_ptr is NULL
char_ptr is NULL
safe_ptr address: [address]
char_ptr address: [address]

Gli indirizzi di memoria effettivi saranno visualizzati come 0, (nil) o una rappresentazione NULL simile, a seconda del sistema, ma il formato e le etichette devono corrispondere esattamente a quanto mostrato sopra.

Provalo tu

#include <stdio.h>

int main() {
    // TODO: Scrivi qui il tuo codice
    // Dichiara e inizializza i tuoi puntatori
    // Controlla se i puntatori sono NULL
    // Stampa l'output richiesto
    
    return 0;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C online