Назад к вопросам
Senior
4
func updateV1(px *int) { x2 := 20 px = &x2 } func updateV2(px *int) { *px = 20 } func main() { x := 10 updateV1(&x) fmt.Println(x) updateV2(&x) fmt.Println(x) }
Компании, где спрашивали
А7
Ответ от нейросети
sobes.tech AI
В этом коде есть две функции, которые принимают указатель на int, но работают по-разному:
func updateV1(px *int) {
x2 := 20
px = &x2
}
func updateV2(px *int) {
*px = 20
}
func main() {
x := 10
updateV1(&x)
fmt.Println(x) // Выведет 10
updateV2(&x)
fmt.Println(x) // Выведет 20
}
Объяснение:
- В
updateV1параметрpx— это локальная копия указателя. Присвоениеpx = &x2меняет только локальную копию, не влияет на переменнуюxвmain. - В
updateV2происходит разыменование указателя*px = 20, то есть изменяется значение по адресу, на который указываетpx. Это меняет значениеxвmain.
Итог: updateV1 не изменяет исходную переменную, а updateV2 — изменяет.
Это демонстрирует разницу между изменением локальной копии указателя и изменением значения по адресу.