Влияние переназначения указателя внутри функции

Программа напечатает 5 два раза. changePointer меняет локальную копию адреса, а p в main по-прежнему указывает на исходную v.

Короткий ответ

Что ответить на собеседовании

Программа напечатает 5 два раза. changePointer меняет локальную копию адреса, а p в main по-прежнему указывает на исходную v.

Подробный разбор

Ответ с пояснениями

Условие

Определите, какой вывод получит следующая программа.

func main() {
    v := 5
    p := &v
    println(*p)

    changePointer(p)
    println(*p)
}

func changePointer(p *int) {
    v := 3
    p = &v
}

Ответ

Программа напечатает 5 два раза. changePointer меняет локальную копию адреса, а p в main по-прежнему указывает на исходную v.

Чтобы записать 3 в исходное значение, выполните внутри функции *p=3. Для смены самого внешнего указателя верните новый *int и присвойте его в main либо передайте **int. Локальная переменная с тем же именем v не связана с переменной вызывающей функции.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее