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
Odpowiedź od AI
W tym kodzie są dwie funkcje, które przyjmują wskaźnik na int, ale działają inaczej:
func updateV1(px *int) {
x2 := 20
px = &x2
}
func updateV2(px *int) {
*px = 20
}
func main() {
x := 10
updateV1(&x)
fmt.Println(x) // Wypisze 10
updateV2(&x)
fmt.Println(x) // Wypisze 20
}
Wyjaśnienie:
- W
updateV1, parametrpxjest lokalną kopią wskaźnika. Przypisaniepx = &x2zmienia tylko tę lokalną kopię, nie wpływa na zmiennąxwmain. - W
updateV2, dereferencja wskaźnika*px = 20zmienia wartość pod adresem, na który wskazujepx. To zmienia wartośćxwmain.
Wynik: updateV1 nie zmienia oryginalnej zmiennej, a updateV2 tak.
To pokazuje różnicę między zmianą lokalnej kopii wskaźnika a zmianą wartości pod adresem, na który wskazuje.