0Pricing
Zig Academy · Урок

Константные указатели и выравнивание

Выражайте доступ только для чтения и размещение в памяти.

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

Доступ только для чтения

Часто нужно предоставить доступ к значению, гарантируя, что оно не будет изменено. Указатель const разрешает чтение, но запрещает запись.

Тип *const T

Указатель на неизменяемые данные записывается как *const T. Вы можете читать данные через него, но присваивание его целевому объекту вызовет ошибку компиляции.

const x: i32 = 5;
const p: *const i32 = &x;

Const следует за &

Взятие адреса константного значения автоматически создаёт *const T, поэтому неизменяемость сохраняется в типе.

const v: u8 = 9;
const p = &v; // *const u8

Изменяемый указатель приводится к константному

*T свободно приводится к *const T, поскольку отказ от права записи всегда безопасен. Обратное преобразование запрещено.

var n: i32 = 1;
const ro: *const i32 = &n;

Зачем предпочитать const

Параметр типа *const T сообщает вызывающему коду, что Вы будете только читать данные, благодаря чему функциям проще доверять.

fn show(p: *const i32) void {
    // read only
}

Что означает выравнивание

У каждого типа есть выравнивание: граница адреса, на которой он должен располагаться. Для u32 обычно требуется адрес, кратный четырём.

Запрос с помощью @alignOf

Встроенная функция @alignOf(T) возвращает требуемое выравнивание типа в байтах, так же как @sizeOf возвращает его размер.

const a = @alignOf(u32);

Выравнивание в типе

Вы можете указать выравнивание указателя в его типе с помощью align, например *align(4) u8, потребовав определённую границу.

var p: *align(4) u8 = undefined;

Почему выравнивание важно

Оборудование быстрее читает выровненные данные, а некоторые процессоры выдают ошибку при невыровненном доступе. Zig отслеживает выравнивание в типе, чтобы обеспечить корректность.

Избыточное и недостаточное выравнивание

Указатель может гарантировать более строгое выравнивание, чем требуется по умолчанию, но ослабить его можно только с помощью явного приведения, например @alignCast.

Const и align вместе

Эти свойства естественно сочетаются: *const align(8) T — это указатель только для чтения, который также гарантирует границу в восемь байт.

Быстрая проверка

Вы пишете функцию, которой нужно только прочитать значение, находящееся за указателем. Какой тип параметра лучше всего это выражает?

Итоги

Указатель *const T предоставляет доступ к данным только для чтения и приводится из *T, а выравнивание, задаваемое через @alignOf и align(n), обеспечивает корректный и быстрый доступ к памяти. 🎯

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

Урок «Константные указатели и выравнивание» бесплатный?

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

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

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

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

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

Сколько времени занимает урок «Константные указатели и выравнивание»?

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

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

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

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

  1. Указатели на один элемент с помощью *T
  2. Разыменование с помощью ptr.*
  3. Указатели на несколько элементов [*]T
  4. Константные указатели и выравнивание
← Назад к Zig Academy