Funksiya va ko'rsatkich
Agar funksiya argument sifatida pointer
olmasa, u faqat argument
nusxasi bilan ishlaydi va o‘zgartirishlar
tashqi o‘zgaruvchiga ta’sir qilmaydi. Agar funksiya pointer
qabul qilsa, funksiya bevosita o‘zgaruvchini xotira
manziliga murojaat qilib o‘zgartiradi. Funksiyaga pointer
argument qabul qilishi uchun funksiyani e'lon qilishda
argumentini quyidagicha yozish kerak bo'ladi:
*
belgisi arg
deb nomlangan argument pointer(o'zgaruvchi xotira manzili)
ni qabul qilishi anglatadi.
Misollar:
Pointersiz
package main
import "fmt"
func ChangeValue(a int) {
a = 100
}
func main() {
x := 10
ChangeValue(x)
fmt.Println(x)
}
Natija:
Pointer bilan
package main
import "fmt"
func ChangeValue(p *int) {
*p = 100 // p da kelgan manzildagi o'zgaruvchini qiymatini o'zgartiradi.
}
func main() {
x := 10
ChangeValue(&x) // x o'zgaruvchisini xotira manzili & bilan berildi
fmt.Println(x)
}
Natija:
Pointerlardan foydalanish
Qachon ishlatish kerak?
- Katta ma’lumot turlarini funksiyaga berishda pointerdan foydalanish, nusxa olishdan ko‘ra tezroq va samaraliroq bo‘ladi.
- O‘zgaruvchini bevosita funksiyada o‘zgartirish kerak bo‘lsa.
- Dinamik ma’lumot tuzilmalari bilan ishlashda (masalan,
struct
lar).
Qachon ishlatmaslik kerak?
- Oddiy o‘zgaruvchilar uchun agar qiymat nusxasi bilan ishlash yetarli bo‘lsa.
- Xavfsizlik muhim bo‘lsa, chunki noto‘g‘ri
pointer
ishlatishnil pointer
xatosiga olib kelishi mumkin.