Какой вывод получит консоль при выполнении примера №66

После добавления package main программа напечатает 5 и 5. changePointer меняет только локальную копию указателя, не значение исходной переменной.

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

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

После добавления package main программа напечатает 5 и 5. changePointer меняет только локальную копию указателя, не значение исходной переменной.

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

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

Условие

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

import ("fmt"
        )

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


       fmt.Printf("%v\n", *p)
       changePointer(p)
       fmt.Printf("%v\n", *p)
}

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

Ответ

После добавления package main программа напечатает 5 и 5. changePointer меняет только локальную копию указателя, не значение исходной переменной.

При вызове передаётся копия адреса. Присваивание p = &v перенаправляет параметр функции на её локальную переменную, но указатель в main остаётся прежним.

Чтобы изменить число, надо выполнить *p = 3. Если требуется заменить именно указатель вызывающей стороны, можно вернуть новый *int либо принять **int. Возвращать указатель на локальную переменную в Go допустимо: её время жизни обеспечивается языком.

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

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

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

Подробнее