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

Antwoord van AI

In deze code zijn er twee functies die een pointer naar een int accepteren, maar verschillend werken:

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

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

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

Uitleg:

  • In updateV1 is de parameter px een lokale kopie van de pointer. De toewijzing px = &x2 wijzigt alleen deze lokale kopie, niet de variabele x in main.
  • In updateV2 wordt de pointer gedereferenceerd *px = 20, dat wil zeggen, de waarde op het adres waarnaar px wijst wordt gewijzigd. Dit wijzigt de waarde van x in main.

Resultaat: updateV1 wijzigt de originele variabele niet, terwijl updateV2 dat wel doet.

Dit toont het verschil tussen het wijzigen van een lokale kopie van de pointer en het wijzigen van de waarde op het adres waarnaar wordt verwezen.