Sobes.tech
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 a px paraméter egy helyi másolat a mutatóról. A px = &x2 hozzárendelés csak ezt a helyi másolatot változtatja meg, nem befolyásolja a main-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 a main-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.