Darsliklar C# Ko’rsatkichlar

C# C# Ko’rsatkichlar

Ko’rsatkichlar (pointers) — xotira manziliga bevosita murojaat qiladigan o’zgaruvchilar. C#’da ko’rsatkichlar C++’dagi kabi keng ishlatilmaydi, chunki til xotirani avtomatik boshqaradi. Biroq maxsus, past darajali vazifalar uchun C# ularni unsafe (xavfli) kontekstda qo’llab-quvvatlaydi.

Ko’rsatkich (pointer)boshqa o’zgaruvchining xotira manzilini saqlaydigan maxsus o’zgaruvchi. C#’da ular faqat unsafe bloklarda ishlatiladi.

C#’da ko’rsatkichlar nima uchun kam ishlatiladi?

C# xavfsizlikni birinchi o’ringa qo’yadi. Xotirani garbage collector avtomatik boshqargani uchun, dasturchi manzillar bilan bevosita ishlashga deyarli hech qachon majbur bo’lmaydi. Buning o’rniga C# murojaat turlari (reference types) va ref kalit so’zini beradi — bular ko’rsatkichlarning xavfsiz muqobilidir.

ref bilan manzil orqali uzatish

Ko’rsatkich o’rniga C#’da ref ishlatiladi. U o’zgaruvchini manzil orqali uzatib, uni funksiya ichida o’zgartirish imkonini beradi:

using System;

void Oshir(ref int son)
{
    son = son + 10;
}

int a = 5;
Oshir(ref a);
Console.WriteLine(a);   // a o'zgardi
15

ref orqali a ning o’zi (nusxasi emas) uzatildi, shuning uchun funksiya uni o’zgartira oldi. Bu ko’rsatkichlarning xavfsiz va o’qiladigan muqobilidir.

unsafe kontekst

Agar haqiqiy ko’rsatkichlar kerak bo’lsa (masalan, past darajali optimizatsiya yoki C kutubxonalari bilan ishlash uchun), C# unsafe blokini beradi:

using System;

unsafe
{
    int son = 26;
    int* ptr = &son;      // manzilni olamiz
    Console.WriteLine($"Qiymat: {*ptr}");
}
Qiymat: 26

int* ptr — ko’rsatkich, &son — manzil, *ptr — dereferensiya (qiymatga kirish). Bu C++’dagiga o’xshaydi, ammo unsafe blokida va maxsus sozlama bilan ishlaydi.

Qiymat va murojaat: xavfsiz yondashuv

Amaliy jadval — C#’da xotira bilan ishlash yo’llari:

Yondashuv Xavfsizmi Qachon
Murojaat turlari ha obyektlar bilan ishlash
ref / out ha funksiyada o’zgartirish
Ko’rsatkich (unsafe) yo’q past darajali maxsus vazifalar

Xulosa

Bu bo’limda C#’da ko’rsatkichlar nega kam ishlatilishini, ref bilan xavfsiz manzil uzatishni va unsafe kontekstdagi haqiqiy ko’rsatkichlarni ko’rib chiqdik. C#’da deyarli har doim xavfsiz muqobillar afzal ko’riladi. Keyingi darsda funksiyalarga o’tamiz.