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,
structlar).
Qachon ishlatmaslik kerak?
- Oddiy o‘zgaruvchilar uchun agar qiymat nusxasi bilan ishlash yetarli bo‘lsa.
- Xavfsizlik muhim bo‘lsa, chunki noto‘g‘ri
pointerishlatishnil pointerxatosiga olib kelishi mumkin.