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
updateV1je parametrpxmístní kopií ukazatele. Přiřazenípx = &x2mění pouze tuto místní kopii, neovlivňuje proměnnouxvmain. - V
updateV2je dereference ukazatele*px = 20, což znamená, že se změní hodnota na adrese, na kterou ukazujepx. To změní hodnotuxvmain.
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.