Skip to content

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:

func func_name(arg *int){
    // funkisya tanasi
}

* 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:

10

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:

100

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 pointer ishlatish nil pointer xatosiga olib kelishi mumkin.