Программа напечатает 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 не связана с переменной вызывающей функции.