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 MI
Válasz az MI-től
Ebben a kódban két olyan függvény van, amelyek egy int típusú mutatót fogadnak, de különböző módon működnek:
func updateV1(px *int) {
x2 := 20
px = &x2
}
func updateV2(px *int) {
*px = 20
}
func main() {
x := 10
updateV1(&x)
fmt.Println(x) // Kiírja 10-et
updateV2(&x)
fmt.Println(x) // Kiírja 20-at
}
Magyarázat:
- Az
updateV1-ben apxparaméter egy helyi másolat a mutatóról. Apx = &x2hozzárendelés csak ezt a helyi másolatot változtatja meg, nem befolyásolja amain-ben lévőx-et. - Az
updateV2-ben a mutató dereferálása*px = 20, azaz a mutató által mutatott érték módosul. Ez megváltoztatja amain-ben lévőxértékét.
Eredmény: Az updateV1 nem módosítja az eredeti változót, míg az updateV2 igen.
Ez bemutatja a különbséget a helyi másolat mutató módosítása és a mutató által mutatott érték módosítása között.