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,pxparametri lokal nusxa.px = &x2tayinlash faqat bu lokal nusxani o‘zgartiradi,maindagixga ta'sir qilmaydi.updateV2da, ko‘rsatkichni dereferensiya qilish*px = 20, ya'ni,pxko‘rsatgan manzildagi qiymat o‘zgartiriladi. Bumaindagixqiymatini 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.