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 АИ
Одговор од АИ
U ovom kodu postoje dvije funkcije koje prihvaćaju pokazivač na int, ali rade na različite načine:
func updateV1(px *int) {
x2 := 20
px = &x2
}
func updateV2(px *int) {
*px = 20
}
func main() {
x := 10
updateV1(&x)
fmt.Println(x) // Ispisat će 10
updateV2(&x)
fmt.Println(x) // Ispisat će 20
}
Objašnjenje:
- U
updateV1, parametarpxje lokalna kopija pokazivača. Dodeljivanjempx = &x2menja se samo ta lokalna kopija, ne utiče na promenljivuxumain. - U
updateV2, dereferencira se pokazivač*px = 20, što menja vrednost na adresi na koju pokazujepx. To menja vrednostxumain.
Rezultat: updateV1 ne menja originalnu promenljivu, dok updateV2 menja.
Ovo demonstrira razliku između promene lokalne kopije pokazivača i promene vrednosti na adresi na koju pokazuje.