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
Atsakymas iš AI
Šiame kode yra dvi funkcijos, kurios priima nuorodą į int, bet veikia skirtingai:
func updateV1(px *int) {
x2 := 20
px = &x2
}
func updateV2(px *int) {
*px = 20
}
func main() {
x := 10
updateV1(&x)
fmt.Println(x) // Išves 10
updateV2(&x)
fmt.Println(x) // Išves 20
}
Paaiškinimas:
updateV1parametraspxyra vietinis nuorodos kopija. Priskyrimaspx = &x2pakeičia tik šią vietinę kopiją, neįtakojamainkintamojox.updateV2atlieka nuorodos de-referenciją*px = 20, tai reiškia, kad keičiasi adresu nurodytoje vietoje esanti reikšmė. Tai keičiamainkintamojoxreikšmę.
Rezultatas: updateV1 nekeičia originalios kintamosios, o updateV2 — taip.
Tai parodo skirtumą tarp vietinės nuorodos kopijos keitimo ir reikšmės keitimo adresu, į kurį nurodo nuoroda.