0Pricing
Zig Academy · Урок

Необязательные указатели и ?*T

Сочетайте указатели с необязательностью.

«Необязательные указатели и ?*T» — бесплатный урок Zig Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Zig Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Zig Academy содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

Pointers Can Be Optional Too

A pointer normally must always aim at a valid value. Make it optional and it gains a legitimate way to mean nothing yet.

The ?*T Shape

The type ?*T reads as: an optional pointer to a T. It either points at a real value or holds null.

var node: ?*Node = null;

A Safe Null Pointer

This is Zig answer to C null pointers. The pointer can be absent, but the optional forces you to check before dereferencing.

Unwrap Before You Follow

You cannot dereference a ?*T directly. First unwrap it with if or orelse to get the plain pointer underneath.

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

Capture Gives a Real Pointer

Inside the if capture the name is a plain *Node, ready to dereference with .* like any non-optional pointer.

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

Great for Linked Structures

Optional pointers shine in linked lists and trees, where a next or child field is null at the end of the chain.

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

Null Marks the End

When you walk a list, a next field of null cleanly signals that you have reached the final node and should stop.

Zig Packs the Tag Away

For pointers, Zig stores the null state in the pointer value itself, so a ?*T takes no extra space over a plain pointer.

Const Optional Pointers

You can combine read-only and optional: ?*const T is an optional pointer through which you may read but never write.

var view: ?*const u8 = null;

Still No Surprise Crashes

Because the type says it might be null, the compiler will not let you forget the check, unlike a raw C pointer dereference.

Walking a Chain

A while loop that captures each optional next pointer is the idiomatic way to traverse a list until null appears.

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

Quick Check

What does the type ?*Node describe?

Recap

You learned ?*T: a safe, optional pointer. Unwrap it before dereferencing, and let null mark the end of linked structures. 🔗

Часто задаваемые вопросы

Урок «Необязательные указатели и ?*T» бесплатный?

Да — полный текст урока «Необязательные указатели и ?*T» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Zig Academy, подпишись на CoddyKit PRO. Курс Zig Academy содержит 4 уроков всего.

Чему я научусь в уроке «Необязательные указатели и ?*T»?

Сочетайте указатели с необязательностью. Ты практикуешь Zig Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Zig Academy?

Предыдущий опыт не требуется. Zig Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Необязательные указатели и ?*T»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Zig Academy?

Да. Каждый урок Zig Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Объявление необязательных типов
  2. Безопасная распаковка с помощью if и orelse
  3. Необязательные указатели и ?*T
  4. null и undefined
← Назад к Zig Academy