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

AIdan javob

Ushbu kodda, int uchun ko‘rsatkichni qabul qiladigan va turli tarzda ishlaydigan ikki funktsiya mavjud:

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

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

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

Tushuntirish:

  • updateV1da, px parametri lokal nusxa. px = &x2 tayinlash faqat bu lokal nusxani o‘zgartiradi, maindagi xga ta'sir qilmaydi.
  • updateV2da, ko‘rsatkichni dereferensiya qilish *px = 20, ya'ni, px ko‘rsatgan manzildagi qiymat o‘zgartiriladi. Bu maindagi x qiymatini o‘zgartiradi.

Natija: updateV1 asl o‘zgaruvchini o‘zgartirmaydi, updateV2 esa o‘zgartiradi.

Bu, lokal nusxa ko‘rsatkichni o‘zgartirish va ko‘rsatgan manzildagi qiymatni o‘zgartirish o‘rtasidagi farqni ko‘rsatadi.