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 assignment гана ушул жергиликтүү көчүрмөнү өзгөртөт, mainдеги xке таасир этпейт.
  • updateV2да, көрсөткүчтү dereference кылуу *px = 20, башкача айтканда, px көрсөтүп жаткан дарекке маанини өзгөртөт. Бул mainдеги x маанисин өзгөртөт.

Жыйынтык: updateV1 оригинал өзгөрмөнү өзгөртпөйт, ал эми updateV2 өзгөртөт.

Бул көрсөтүү жергиликтүү көчүрмө көрсөткүчтү өзгөртүүнүн жана көрсөтүп жаткан дарекке маанини өзгөртүүнүн айырмасын көрсөтөт.