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 АИ

Одговор од АИ

U ovom kodu postoje dvije funkcije koje prihvaćaju pokazivač na int, ali rade na različite načine:

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

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

func main() {
    x := 10
    updateV1(&x)
    fmt.Println(x) // Ispisat će 10
    updateV2(&x)
    fmt.Println(x) // Ispisat će 20
}

Objašnjenje:

  • U updateV1, parametar px je lokalna kopija pokazivača. Dodeljivanjem px = &x2 menja se samo ta lokalna kopija, ne utiče na promenljivu x u main.
  • U updateV2, dereferencira se pokazivač *px = 20, što menja vrednost na adresi na koju pokazuje px. To menja vrednost x u main.

Rezultat: updateV1 ne menja originalnu promenljivu, dok updateV2 menja.

Ovo demonstrira razliku između promene lokalne kopije pokazivača i promene vrednosti na adresi na koju pokazuje.