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

Atbilde no AI

Šajā kodā ir divas funkcijas, kas pieņem norādi uz int, bet darbojas dažādi:

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

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

func main() {
    x := 10
    updateV1(&x)
    fmt.Println(x) // Izvadīs 10
    updateV2(&x)
    fmt.Println(x) // Izvadīs 20
}

Skaidrojums:

  • updateV1 parametrs px ir vietējā kopija norādes. Piešķiršana px = &x2 maina tikai šo vietējo kopiju, neietekmējot main mainīgo x.
  • updateV2 veic norādes dereferencēšanu *px = 20, tas ir, mainās adresei norādītā vērtība. Tas maina main mainīgā x vērtību.

Rezultāts: updateV1 nemaina oriģinālo mainīgo, bet updateV2 — gan.

Tas demonstrē atšķirību starp vietējās norādes kopijas maiņu un vērtības maiņu adresē, uz kuru norāda norāde.