Разыменование с помощью ptr.*
Читайте и записывайте данные через указатель.
«Разыменование с помощью ptr.*» — бесплатный урок Zig Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Zig Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Zig Academy содержит 4 уроков всего.
Доступ к значению
Указатель хранит адрес, а не значение. Чтобы использовать значение, находящееся по этому адресу, сначала нужно разыменовать указатель.
Синтаксис .*
Zig выполняет разыменование с помощью завершающего .* у указателя. Поэтому ptr.* означает значение, на которое в данный момент указывает ptr.
var x: i32 = 7;
const p = &x;
const v = p.*;Чтение через указатель
Запись ptr.* в выражении читает значение, на которое указывает указатель, и возвращает обычную копию, которую можно использовать где угодно.
const doubled = p.* * 2;Запись через указатель
Поместите ptr.* слева от присваивания, чтобы записать новое значение в исходную область памяти.
p.* = 99;Изменения видны
Поскольку указатель совместно использует исходное хранилище, запись через него обновляет и переменную, которую видят все остальные.
var x: i32 = 1;
const p = &x;
p.* = 5;
// x is now 5Оператора стрелки нет
В Zig, в отличие от C, нет оператора ->. Читаете вы поле или записываете в него — всегда используется одно и то же разыменование .*.
Сначала разыменование, затем поле
Для указателя на структуру запись p.field работает напрямую: Zig автоматически выполняет разыменование при доступе к полю, поэтому .* здесь не нужен.
const p = &point;
const y = p.y;Явная запись допустима
При желании можно явно написать p.*.field, но более короткая запись p.field соответствует идиоматике Zig и читается проще.
Const запрещает запись
Если указатель имеет тип *const T, то ptr.* доступен только для чтения; попытка присвоить значение через него приводит к ошибке компиляции.
const x: i32 = 3;
const p = &x;
// p.* = 4; // errorРазыменование в арифметике
Вы можете использовать ptr.* везде, где допустимо значение, в том числе в арифметике. Поэтому p.* + 1 просто означает значение, на которое указывает p, плюс единицу.
const next = p.* + 1;Распространённая ошибка
Если забыть .*, программа попытается использовать адрес как число, что является ошибкой типа. Zig обнаружит это во время компиляции, а не выполнения.
Быстрая проверка
У вас есть const p = &x, и вы хотите записать новое число в x через p. Что нужно написать?
Повторение
Используйте ptr.*, чтобы читать или изменять значение, на которое указывает указатель; поля структур разыменовываются автоматически, а указатели *const T остаются доступными только для чтения. 🎯
Часто задаваемые вопросы
Урок «Разыменование с помощью ptr.*» бесплатный?
Да — полный текст урока «Разыменование с помощью ptr.*» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Zig Academy, подпишись на CoddyKit PRO. Курс Zig Academy содержит 4 уроков всего.
Чему я научусь в уроке «Разыменование с помощью ptr.*»?
Читайте и записывайте данные через указатель. Ты практикуешь Zig Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Zig Academy?
Предыдущий опыт не требуется. Zig Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Разыменование с помощью ptr.*»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Zig Academy?
Да. Каждый урок Zig Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Указатели на один элемент с помощью *T
- Разыменование с помощью ptr.*
- Указатели на несколько элементов [*]T
- Константные указатели и выравнивание