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

Respuesta de la IA

En este código hay dos funciones que aceptan un puntero a int, pero trabajan de manera diferente:

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

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

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

Explicación:

  • En updateV1, el parámetro px es una copia local del puntero. La asignación px = &x2 solo cambia la copia local, no afecta a la variable x en main.
  • En updateV2, se desreferencia el puntero *px = 20, es decir, se cambia el valor en la dirección a la que apunta px. Esto modifica el valor de x en main.

Resultado: updateV1 no modifica la variable original, mientras que updateV2 sí.

Esto demuestra la diferencia entre modificar una copia local del puntero y modificar el valor en la dirección a la que apunta.