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 AI

Atsakymas iš AI

Šiame kode yra dvi funkcijos, kurios priima nuorodą į int, bet veikia skirtingai:

func updateV1(px *int) {
    x2 := 20
    px = &x2
}

func updateV2(px *int) {
    *px = 20
}

func main() {
    x := 10
    updateV1(&x)
    fmt.Println(x) // Išves 10
    updateV2(&x)
    fmt.Println(x) // Išves 20
}

Paaiškinimas:

  • updateV1 parametras px yra vietinis nuorodos kopija. Priskyrimas px = &x2 pakeičia tik šią vietinę kopiją, neįtakoja main kintamojo x.
  • updateV2 atlieka nuorodos de-referenciją *px = 20, tai reiškia, kad keičiasi adresu nurodytoje vietoje esanti reikšmė. Tai keičia main kintamojo x reikšmę.

Rezultatas: updateV1 nekeičia originalios kintamosios, o updateV2 — taip.

Tai parodo skirtumą tarp vietinės nuorodos kopijos keitimo ir reikšmės keitimo adresu, į kurį nurodo nuoroda.