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
Vastus AI-lt
Selles koodis on kaks funktsiooni, mis võtavad int-viitaja, kuid töötavad erinevalt:
func updateV1(px *int) {
x2 := 20
px = &x2
}
func updateV2(px *int) {
*px = 20
}
func main() {
x := 10
updateV1(&x)
fmt.Println(x) // Trükib välja 10
updateV2(&x)
fmt.Println(x) // Trükib välja 20
}
Selgitus:
- Funktsioonis
updateV1on parameeterpxkohaliku koopiana näitajast. Määraminepx = &x2muudab ainult selle kohaliku koopiana, mittemain-is oleva muutujax. - Funktsioonis
updateV2dereferenceeritakse näitaja*px = 20, mis tähendab, et muudetakse aadressil olevat väärtust, millelepxosutab. See muudabmain-is oleva muutujaxväärtust.
Tulemus: updateV1 ei muuda algset muutujat, updateV2 aga muudab.
See näitab vahet kohaliku koopiana näitaja muutmise ja väärtuse muutmise aadressil, millele näitaja osutab.