Sobes.tech
Back to questions
Senior
3

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) }

Companies where asked
А7

Answer from AI

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 — изменяет.

Это демонстрирует разницу между изменением локальной копии указателя и изменением значения по адресу.