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 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âmetro px é uma cópia local do ponteiro. A atribuição px = &x2 altera apenas essa cópia local, não afetando a variável x em main.
  • Em updateV2, ocorre a desreferenciação do ponteiro *px = 20, ou seja, o valor na direção apontada por px é alterado. Isso muda o valor de x em main.

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.