0Pricing
Zig Academy · Lezione

Puntatori optional e ?*T

Combinare puntatori e opzionalità

Puntatori optional e ?*T è una lezione Zig Academy gratuita su CoddyKit. Questa è la lezione 3 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 Zig Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Zig Academy include 4 lezioni in totale.

Anche i puntatori possono essere optional

Normalmente un puntatore deve sempre riferirsi a un valore valido. Rendendolo optional, gli si dà un modo legittimo per indicare che al momento non punta a nulla.

La forma ?*T

Il tipo ?*T si legge: puntatore optional a un T. O punta a un valore reale oppure contiene null.

var node: ?*Node = null;

Un puntatore null sicuro

Questa è la risposta di Zig ai puntatori null di C. Il puntatore può essere assente, ma l'optional la obbliga a controllare prima di dereferenziarlo.

Eseguire l'unwrap prima di seguire il puntatore

Non può dereferenziare direttamente un ?*T. Prima deve eseguire l'unwrap con if o orelse per ottenere il puntatore semplice sottostante.

if (node) |p| {
    use(p.*);
}

La cattura fornisce un puntatore reale

All'interno della cattura dell'if, il nome è un semplice *Node, pronto per essere dereferenziato con .* come qualsiasi puntatore non optional.

if (head) |p| {
    const value = p.*;
}

Ideale per le strutture collegate

I puntatori optional sono particolarmente utili in liste collegate e alberi, dove un campo next o child è null alla fine della catena.

const Node = struct { next: ?*Node };

null indica la fine

Quando percorre una lista, un campo next uguale a null indica chiaramente che ha raggiunto l'ultimo nodo e deve fermarsi.

Zig memorizza il tag nel puntatore

Per i puntatori, Zig memorizza lo stato null nel valore del puntatore stesso, quindi un ?*T non occupa più spazio di un puntatore semplice.

Puntatori optional const

Può combinare sola lettura e optional: ?*const T è un puntatore optional attraverso il quale può leggere, ma non scrivere.

var view: ?*const u8 = null;

Niente crash imprevisti

Poiché il tipo indica che il valore potrebbe essere null, il compilatore non le permette di dimenticare il controllo, a differenza della dereferenziazione di un puntatore C grezzo.

Percorrere una catena

Un ciclo while che acquisisce ogni puntatore next optional è il modo idiomatico per attraversare una lista fino alla comparsa di null.

while (cur) |n| {
    cur = n.next;
}

Verifica rapida

Che cosa descrive il tipo ?*Node?

Riepilogo

Ha imparato ?*T: un puntatore optional sicuro. Esegua l'unwrap prima di dereferenziarlo e lasci che null indichi la fine delle strutture collegate. 🔗

Domande Frequenti

La lezione «Puntatori optional e ?*T» è gratuita?

Sì — il testo completo di «Puntatori optional e ?*T» è 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 Zig Academy, passa a CoddyKit PRO. Il corso Zig Academy include 4 lezioni in totale.

Cosa imparerò in «Puntatori optional e ?*T»?

Combinare puntatori e opzionalità Eserciti Zig 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 Zig Academy?

Non è richiesta alcuna esperienza precedente. Zig 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 3 di 4.

Quanto tempo richiede la lezione «Puntatori optional e ?*T»?

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 Zig Academy?

Sì. Ogni lezione Zig 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. Dichiarare tipi optional
  2. Eseguire l'unwrap in sicurezza con if e orelse
  3. Puntatori optional e ?*T
  4. null e undefined a confronto
← Torna a Zig Academy