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
Odpoveď od AI
V tomto kóde existujú dve funkcie, ktoré prijímajú ukazovateľ na int, ale fungujú odlišne:
func updateV1(px *int) {
x2 := 20
px = &x2
}
func updateV2(px *int) {
*px = 20
}
func main() {
x := 10
updateV1(&x)
fmt.Println(x) // Vytlačí 10
updateV2(&x)
fmt.Println(x) // Vytlačí 20
}
Vysvetlenie:
- V
updateV1je parameterpxmiestna kópia ukazovateľa. Priradeniepx = &x2mení iba túto miestnu kópiu, neovplyvňuje premennúxvmain. - V
updateV2je dereferencovanie ukazovateľa*px = 20, čo znamená, že sa zmení hodnota na adrese, na ktorú ukazujepx. To zmení hodnotuxvmain.
Výsledok: updateV1 nemení pôvodnú premennú, zatiaľ čo updateV2 áno.
Toto demonštruje rozdiel medzi zmenou lokálnej kópie ukazovateľa a zmenou hodnoty na adrese, na ktorú ukazuje.