Puntatori const e allineamento
Esprimere accesso in sola lettura e disposizione in memoria
Puntatori const e allineamento è una lezione Zig Academy gratuita su CoddyKit. Questa è la lezione 4 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.
Accesso in sola lettura
Spesso si vuole condividere un valore promettendo di non modificarlo. Un puntatore const concede l'accesso in lettura impedendo le scritture.
Il tipo *const T
Scriva un puntatore a dati immutabili come *const T. Può leggerne il contenuto, ma assegnare un valore alla destinazione genera un errore di compilazione.
const x: i32 = 5;
const p: *const i32 = &x;Const viaggia con &
Prendere l'indirizzo di un valore const produce automaticamente un *const T, quindi l'immutabilità viene preservata dal tipo.
const v: u8 = 9;
const p = &v; // *const u8Mutable viene convertito in Const
Un *T viene convertito liberamente in *const T, perché rimuovere il permesso di scrittura è sempre sicuro. Il contrario non è consentito.
var n: i32 = 1;
const ro: *const i32 = &n;Perché preferire const
Accettare un parametro *const T comunica ai chiamanti che lo leggerà soltanto, rendendo le funzioni più affidabili.
fn show(p: *const i32) void {
// read only
}Che cosa significa l'allineamento
Ogni tipo ha un allineamento: il limite di indirizzo su cui deve trovarsi. In genere, un u32 richiede un indirizzo divisibile per quattro.
Interrogare con @alignOf
Il builtin @alignOf(T) restituisce l'allineamento richiesto da un tipo in byte, proprio come @sizeOf restituisce la sua dimensione.
const a = @alignOf(u32);Allineamento nel tipo
Può indicare l'allineamento di un puntatore nel suo tipo usando align, come in *align(4) u8, per richiedere un limite specifico.
var p: *align(4) u8 = undefined;Perché l'allineamento è importante
L'hardware legge più velocemente i dati allineati e alcune CPU generano un fault in caso di accesso non allineato. Zig tiene traccia dell'allineamento nel tipo per garantire la correttezza.
Allineamento eccessivo e insufficiente
Un puntatore può garantire un allineamento più forte di quello predefinito, ma non può indebolirlo senza un cast esplicito come @alignCast.
Const e align insieme
I due elementi si combinano naturalmente: *const align(8) T è un puntatore di sola lettura che garantisce anche un limite di otto byte.
Verifica rapida
Scriva una funzione che deve solo leggere il valore a cui punta un puntatore. Quale tipo di parametro lo esprime meglio?
Riepilogo
Un puntatore *const T condivide dati in sola lettura e viene convertito da *T, mentre l'allineamento, indicato tramite @alignOf e align(n), mantiene gli accessi alla memoria corretti e veloci. 🎯
Impara Zig con un tutor IA — gratis
Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.
- Corsi
- 30
- Lezioni
- 120
Domande Frequenti
La lezione «Puntatori const e allineamento» è gratuita?
Sì — il testo completo di «Puntatori const e allineamento» è 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 const e allineamento»?
Esprimere accesso in sola lettura e disposizione in memoria 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 4 di 4.
Quanto tempo richiede la lezione «Puntatori const e allineamento»?
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
- Puntatori a un singolo elemento con *T
- Dereferenziare con ptr.*
- Puntatori a più elementi [*]T
- Puntatori const e allineamento