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 IA
Resposta da IA
Neste código há duas funções que aceitam um ponteiro para int, mas funcionam de forma diferente:
func updateV1(px *int) {
x2 := 20
px = &x2
}
func updateV2(px *int) {
*px = 20
}
func main() {
x := 10
updateV1(&x)
fmt.Println(x) // Vai imprimir 10
updateV2(&x)
fmt.Println(x) // Vai imprimir 20
}
Explicação:
- Em
updateV1, o parâmetropxé uma cópia local do ponteiro. A atribuiçãopx = &x2altera apenas essa cópia local, não afetando a variávelxemmain. - Em
updateV2, ocorre a desreferenciação do ponteiro*px = 20, ou seja, o valor na direção apontada porpxé alterado. Isso muda o valor dexemmain.
Resultado: updateV1 não altera a variável original, enquanto updateV2 altera.
Isso demonstra a diferença entre alterar uma cópia local do ponteiro e alterar o valor na direção apontada.