После добавления package main программа напечатает 5 и 5. changePointer меняет только локальную копию указателя, не значение исходной переменной.
Какой вывод получит консоль при выполнении примера №66
После добавления 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 допустимо: её время жизни обеспечивается языком.