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ámetropxes una copia local del puntero. La asignaciónpx = &x2solo cambia la copia local, no afecta a la variablexenmain. - En
updateV2, se desreferencia el puntero*px = 20, es decir, se cambia el valor en la dirección a la que apuntapx. Esto modifica el valor dexenmain.
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.