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

Ҷавоб аз AI

Дар коде, ду функсия ҳастанд, ки нишондиҳанда ба int-ро қабул мекунанд, аммо ба таври гуногун кор мекунанд:

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

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

func main() {
    x := 10
    updateV1(&x)
    fmt.Println(x) // 10 мебарорад
    updateV2(&x)
    fmt.Println(x) // 20 мебарорад
}

Тавзеҳ:

  • Дар updateV1, параметр px нусхаи маҳаллӣ аз нишондиҳанда аст. Таъин кардани px = &x2 танҳо нусхаи маҳаллӣ-ро тағир медиҳад, на тағир медиҳад тағирот дар тағирёбии x дар main.
  • Дар updateV2, дароз кардани нишондиҳанда *px = 20, яъне, арзиши дар суроғае, ки px нишон медиҳад, тағир меёбад. Ин арзиши x дар main-ро тағир медиҳад.

Натиҷа: updateV1 тағир намедиҳад тағирёбии аслӣ, дар ҳоле ки updateV2 тағир медиҳад.

Ин фарқиятро байни тағир додани нусхаи маҳаллӣ аз нишондиҳанда ва тағир додани арзиш дар суроғаи нишон дода нишон медиҳад.