В приведённом main переменная p не объявлена, поэтому программа не компилируется. После замены p=&v на p:=&v она выведет 3 и 3.
Какой результат выведет программа в консоль (пример 55)
В приведённом main переменная p не объявлена, поэтому программа не компилируется. После замены p=&v на p:=&v она выведет 3 и 3.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какой вывод появится на экране после выполнения следующего кода:
package main
import "fmt"
func changePointer(p * int) {
v := 3
p = &v
}
func main () {
v := 3
p = &v
fmt.Println(*p)
changePointer(p)
fmt.Println(*p)
}
Ответ
В приведённом main переменная p не объявлена, поэтому программа не компилируется. После замены p=&v на p:=&v она выведет 3 и 3.
changePointer получает копию указателя и переназначает только свою локальную p. Внешний указатель остаётся прежним. Совпадение значений 3 маскирует различие объектов; даже если внутри взять другое число, внешний вывод не изменится. Для изменения исходного числа нужна запись *p=..., для смены внешнего адреса — возврат указателя или **int.