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
updateV1is de parameterpxeen lokale kopie van de pointer. De toewijzingpx = &x2wijzigt alleen deze lokale kopie, niet de variabelexinmain. - In
updateV2wordt de pointer gedereferenceerd*px = 20, dat wil zeggen, de waarde op het adres waarnaarpxwijst wordt gewijzigd. Dit wijzigt de waarde vanxinmain.
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.