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
Atbilde no AI
Šajā kodā ir divas funkcijas, kas pieņem norādi uz int, bet darbojas dažādi:
func updateV1(px *int) {
x2 := 20
px = &x2
}
func updateV2(px *int) {
*px = 20
}
func main() {
x := 10
updateV1(&x)
fmt.Println(x) // Izvadīs 10
updateV2(&x)
fmt.Println(x) // Izvadīs 20
}
Skaidrojums:
updateV1parametrspxir vietējā kopija norādes. Piešķiršanapx = &x2maina tikai šo vietējo kopiju, neietekmējotmainmainīgox.updateV2veic norādes dereferencēšanu*px = 20, tas ir, mainās adresei norādītā vērtība. Tas mainamainmainīgāxvērtību.
Rezultāts: updateV1 nemaina oriģinālo mainīgo, bet updateV2 — gan.
Tas demonstrē atšķirību starp vietējās norādes kopijas maiņu un vērtības maiņu adresē, uz kuru norāda norāde.