Sobes.tech
Senior

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

sobes.tech AI

Odpověď od AI

V tomto kódu jsou dvě funkce, které přijímají ukazatel na int, ale fungují odlišně:

func updateV1(px *int) {
    x2 := 20
    px = &x2
}

func updateV2(px *int) {
    *px = 20
}

func main() {
    x := 10
    updateV1(&x)
    fmt.Println(x) // Vytiskne 10
    updateV2(&x)
    fmt.Println(x) // Vytiskne 20
}

Vysvětlení:

  • V updateV1 je parametr px místní kopií ukazatele. Přiřazení px = &x2 mění pouze tuto místní kopii, neovlivňuje proměnnou x v main.
  • V updateV2 je dereference ukazatele *px = 20, což znamená, že se změní hodnota na adrese, na kterou ukazuje px. To změní hodnotu x v main.

Výsledek: updateV1 nemění původní proměnnou, zatímco updateV2 ano.

Toto ukazuje rozdíl mezi změnou místní kopie ukazatele a změnou hodnoty na adrese, na kterou ukazuje.