Ponteiros opcionais e ?*T
Combine ponteiros com opcionalidade.
Ponteiros opcionais e ?*T é uma aula grátis de Zig Academy no CoddyKit. Esta é a aula 3 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.
Ponteiros também podem ser opcionais
Normalmente, um ponteiro deve sempre apontar para um valor válido. Torne-o opcional e ele passará a ter uma forma legítima de representar que ainda não aponta para nada.
A forma ?*T
O tipo ?*T significa: um ponteiro opcional para um T. Ele aponta para um valor real ou contém null.
var node: ?*Node = null;Um ponteiro nulo seguro
Esta é a resposta de Zig aos ponteiros nulos de C. O ponteiro pode estar ausente, mas o opcional obriga você a verificá-lo antes de desreferenciá-lo.
Desembrulhe antes de seguir
Você não pode desreferenciar um ?*T diretamente. Primeiro, desembrulhe-o com if ou orelse para obter o ponteiro simples que está dentro dele.
if (node) |p| {
use(p.*);
}A captura fornece um ponteiro real
Dentro da captura de if, o nome é um *Node simples, pronto para ser desreferenciado com .* como qualquer ponteiro não opcional.
if (head) |p| {
const value = p.*;
}Excelente para estruturas encadeadas
Ponteiros opcionais são ideais em listas encadeadas e árvores, nas quais um campo seguinte ou filho é null no fim da cadeia.
const Node = struct { next: ?*Node };Null marca o fim
Ao percorrer uma lista, um campo seguinte com valor null indica claramente que você chegou ao último node e deve parar.
Zig armazena a marca separadamente
Para ponteiros, Zig armazena o estado null no próprio valor do ponteiro; assim, um ?*T não ocupa espaço adicional em relação a um ponteiro comum.
Ponteiros opcionais constantes
Você pode combinar somente leitura e opcionalidade: ?*const T é um ponteiro opcional por meio do qual você pode ler, mas nunca escrever.
var view: ?*const u8 = null;Ainda sem falhas inesperadas
Como o tipo informa que o valor pode ser null, o compilador não permitirá que você esqueça a verificação, ao contrário de uma desreferenciação de ponteiro bruto em C.
Percorrendo uma cadeia
Um laço while que captura cada ponteiro seguinte opcional é a forma idiomática de percorrer uma lista até que null apareça.
while (cur) |n| {
cur = n.next;
}Verificação rápida
O que o tipo ?*Node descreve?
Recapitulação
Você aprendeu ?*T: um ponteiro opcional e seguro. Desembrulhe-o antes de desreferenciá-lo e deixe null marcar o fim das estruturas encadeadas. 🔗
Perguntas Frequentes
A aula “Ponteiros opcionais e ?*T” é grátis?
Sim — o texto completo de “Ponteiros opcionais e ?*T” é 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 opcionais e ?*T”?
Combine ponteiros com opcionalidade. 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 3 de 4.
Quanto tempo leva a aula “Ponteiros opcionais e ?*T”?
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
- Declarando tipos opcionais
- Desempacotando com segurança com if e orelse
- Ponteiros opcionais e ?*T
- null versus undefined