Основы синтаксиса Строки и руны Массивы и слайсы Map Структуры и методы Интерфейсы Горутины и конкурентность Каналы defer, panic, recover Обработка ошибок Указатели Пакет sync Тестирование Пакеты и модули Стандартная библиотека Context Generics iota и перечисления Разное / продвинутое

Указатели

4 вопросов

Указатели в Go позволяют передавать данные по ссылке. В отличие от C, арифметика указателей запрещена. Операторы & (взятие адреса) и * (разыменование) - базовые конструкции.

1 Что делает оператор &? 🟢 Лёгкий
Ответ: B) Берёт адрес переменной

&x возвращает указатель на x (тип *T). Не путать с побитовым И (a & b) - там оба операнда числа. & перед переменной - унарный оператор взятия адреса.

Подробнее →
2 Что делает оператор * перед указателем? 🟢 Лёгкий
Ответ: B) Разыменование указателя

*p - получает значение, на которое указывает p. Если p = &x, то *p - это x. Разыменование nil-указателя вызывает panic. Не путать с * в объявлении типа (*int - тип «указатель на int»).

Подробнее →
3 Есть ли арифметика указателей в Go? 🟡 Средний
Ответ: B) Нет (только через unsafe)

Go запрещает арифметику указателей для безопасности памяти. Нельзя сделать p++ или p + 4 как в C. Через пакет unsafe можно, но это считается плохой практикой.

Подробнее →
4 Что вернёт new(int)? 🟢 Лёгкий
Ответ: B) *int, указывающий на 0

new(T) выделяет память для значения типа T, инициализирует zero value и возвращает указатель *T. new(int) вернёт *int, указывающий на 0.

Подробнее →