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

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, parametrul px este o copie locală a pointerului. Atribuirea px = &x2 schimbă doar această copie locală, fără a afecta variabila x din main.
  • În updateV2, se dereferențiază pointerul *px = 20, adică se schimbă valoarea de la adresa la care pointează px. Acest lucru schimbă valoarea lui x din main.

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ă.