Ponteiros constantes e alinhamento
Expresse acesso somente para leitura e organização na memória.
Ponteiros constantes e alinhamento é uma aula grátis de Zig Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Zig Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Zig Academy inclui 4 aulas no total.
Acesso somente para leitura
Muitas vezes, você quer compartilhar um valor, mas promete não alterá-lo. Um ponteiro const concede acesso de leitura e proíbe escritas.
O tipo *const T
Escreva um ponteiro para dados imutáveis como *const T. Você pode lê-los por meio dele, mas atribuir algo ao destino gera um erro de compilação.
const x: i32 = 5;
const p: *const i32 = &x;Constante acompanha &
Obter o endereço de um valor constante produz automaticamente um *const T, portanto a imutabilidade é preservada pelo tipo.
const v: u8 = 9;
const p = &v; // *const u8Mutável converte para constante
Um *T é convertido livremente para *const T, pois remover a permissão de escrita é sempre seguro. O inverso não é permitido.
var n: i32 = 1;
const ro: *const i32 = &n;Por que preferir const
Aceitar um parâmetro *const T indica aos chamadores que você fará apenas leituras, o que torna as funções mais confiáveis.
fn show(p: *const i32) void {
// read only
}O que significa alinhamento
Todo tipo tem um alinhamento: o limite de endereço em que ele deve estar. Um u32 geralmente precisa de um endereço divisível por quatro.
Consultar com @alignOf
O recurso integrado @alignOf(T) retorna o alinhamento exigido por um tipo em bytes, assim como @sizeOf retorna seu tamanho.
const a = @alignOf(u32);Alinhamento no tipo
Você pode indicar o alinhamento de um ponteiro no tipo usando align, como em *align(4) u8, para exigir um limite específico.
var p: *align(4) u8 = undefined;Por que o alinhamento importa
O hardware lê dados alinhados mais rapidamente, e algumas CPUs geram um erro de hardware ao acessar dados desalinhados. Zig acompanha o alinhamento no tipo para manter isso correto.
Alinhamento acima e abaixo do necessário
Um ponteiro pode prometer um alinhamento mais forte que o padrão, mas você não pode enfraquecê-lo sem uma conversão explícita como @alignCast.
Constante e alinhamento juntos
Os dois combinam naturalmente: um *const align(8) T é um ponteiro somente para leitura que também garante um limite de oito bytes.
Verificação rápida
Você escreve uma função que precisa apenas ler o valor por trás de um ponteiro. Que tipo de parâmetro expressa melhor essa intenção?
Recapitulação
Um ponteiro *const T compartilha dados somente para leitura e é convertido a partir de *T, enquanto o alinhamento, consultado por meio de @alignOf e align(n), mantém o acesso à memória correto e rápido. 🎯
Perguntas Frequentes
A aula “Ponteiros constantes e alinhamento” é grátis?
Sim — o texto completo de “Ponteiros constantes e alinhamento” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Zig Academy, atualize para CoddyKit PRO. O curso de Zig Academy inclui 4 aulas no total.
O que vou aprender em “Ponteiros constantes e alinhamento”?
Expresse acesso somente para leitura e organização na memória. Você pratica Zig Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Zig Academy?
Nenhuma experiência prévia é necessária. Zig Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Ponteiros constantes e alinhamento”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Zig Academy?
Sim. Cada aula de Zig Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Ponteiros para um único item com *T
- Desreferenciando com ptr.*
- Ponteiros para vários itens [*]T
- Ponteiros constantes e alinhamento