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
Răspuns de la AI
În acest cod, există două funcții care acceptă un pointer către int, dar funcționează diferit:
func updateV1(px *int) {
x2 := 20
px = &x2
}
func updateV2(px *int) {
*px = 20
}
func main() {
x := 10
updateV1(&x)
fmt.Println(x) // Va afișa 10
updateV2(&x)
fmt.Println(x) // Va afișa 20
}
Explicație:
- În
updateV1, parametrulpxeste o copie locală a pointerului. Atribuireapx = &x2schimbă doar această copie locală, fără a afecta variabilaxdinmain. - În
updateV2, se dereferențiază pointerul*px = 20, adică se schimbă valoarea de la adresa la care pointeazăpx. Acest lucru schimbă valoarea luixdinmain.
Rezultat: updateV1 nu modifică variabila originală, în timp ce updateV2 o face.
Aceasta demonstrează diferența dintre modificarea unei copii locale a pointerului și modificarea valorii de la adresa la care pointează.