R. A. Ro‘ziyev, U. M. Mirsanov, F. J. Toxirov, L. S. Isroilova, H. N. Arziqulov


Download 1.27 Mb.
bet28/45
Sana14.10.2023
Hajmi1.27 Mb.
#1703549
1   ...   24   25   26   27   28   29   30   31   ...   45
Bog'liq
C qo`llanma 29.06

void tipli ko‘rsatkich. Bu ko‘rsatkich obyekt turi oldindan ma’lum bo‘lmaganda ishlatiladi, ya’ni bir ko‘rsatkichda turli vaqtda har xil turdagi obyektlar manzili saqlanishi mumkin. Faqat void tipidagi ko‘rsatkichga har qanday turdagi ko‘rsatkichning qiymatini yuklash mumkin. Lekin, ko‘rsatilgan manzildagi qiymatni ishlatishdan oldin, uni turi aniq bir turga oshkor ravishda keltirilishi kerak.
void tipidagi ko‘rsatkichni e’lon qilish quyidagicha yoziladi:
void *;
Ko‘rsatrichni o‘zi o‘zgarmas yoki o‘zgaruvchan bo‘lishi, shuningdek o‘zgarmas yoki o‘zgaruvchiga o‘zlashtirilishi mumkin, masalan:
int i; // butun o‘zgaruvchi;
const int ci=1; // butun o‘zgarmas;
int *pi; // butun o‘zgaruvchiga ko‘rsatkich;
const int *pci; // butun o‘zgarmasga ko‘rsatkich;
int *const cp=&i; // butun o‘zgaruvchiga o‘zgarmas-ko‘rsatkich;
const int * const cpc=&ci; // butun o‘zgarmasga o‘zgarmas-ko‘rsatkich.
Misollardan ko‘rinib turibdiki, ‘*’ va ko‘rsatkich nomi orasida turgan const modifikatori faqat ko‘rsatkichning o‘ziga tegishli hisoblanadi, uni o‘zgartirish mumkin emasligini bildiradi. ‘*’ belgisidan chapda turgan const esa ko‘rsatilgan manzildagi qiymatni o‘zgarmas ekanligini bildiradi.
Ko‘rsatkichga boshlang‘ich qiymatni berish uchun ‘&’ - manzilni olish amali ishlatiladi.
Ko‘rsatkichlar ko‘pincha dinamik xotira (boshqa nomi “uyum” yoki “heap”) bilan bog‘liq holda ishlatiladi. Dinamik xotira bilan ishlatilishiga sabab, bu sohadagi bo‘sh xotira dastur ishlash jarayonida, kerakli paytida ajratib olinadi va bu xotiraga zarurat bo‘lmaganida qaytariladi (bo‘shatiladi) hamda u keyinchalik dastur tomonidan yana ishlatilishi mumkin. Bunday xotiraga faqat ko‘rsatkichlar yordamida murojaat qilish mumkin. Ushbu o‘zgaruvchilar dinamik o‘zgaruvchilar deyiladi va ularni faoliyat vaqti yaratilgan nuqtadan boshlab dastur oxirigacha yoki oshkor ravishda xotira bo‘shatilishigacha davom etadi.
Ko‘rsatkichlarni e’lon qilishda, unga boshlang‘ich qiymatlar berish mumkin. Boshlang‘ich qiymat ko‘rsatkich nomidan so‘ng yoki qavs ichida yoki ‘=‘ belgidan keyin beriladi. Boshlang‘ich qiymatlar quyidagi usullar bilan berilishi mumkin:
1.Ko‘rsatkichga mavjud bo‘lgan obyektning manzilini o‘zlashtirish:
a) manzilni olish amali orqali:
int i=5,k=4; // butun o‘zgaruvchilar;
int *p = &i; // p ko‘rsatkichga i o‘zgaruvchini manzili yoziladi;
int *p1(&k); // p1 ko‘rsatkichga k o‘zgaruvchini manzili yoziladi.
b) boshlang`ich qiymat berilgan boshqa ko‘rsatkichni qiymatini berish:
int * r=p; // p oldin e’lon qilingan va qiymatga ega bo‘lgan ko‘rsatkich.
c) massiv yoki funksiya nomini berish:
int b[10]; //massivni e’lon qilish;
int * t=b; //massivning boshlang‘ich manzilini berish;

void f(int a) { /* … */} // funksiyani aniqlash;
void (*pf)(int); // funksiyaga ko‘rsatkichni e’lon qilish;
pf=f; // funksiyani manzilini ko‘rsatkichga o‘tkazish.
2. Oshkor ravishda xotirani absolyut manzilini o‘zlashtirish:
char *ab = (char *)0xB8000000;
bunda 0xB8000000 – o‘n oltilik o‘zgarmas son va (char *) – turga keltirish amali bo‘lib, u ab o‘zgaruvchi xotiraning absolyut manzilidagi baytlarni char sifatida qayta ishlovchi ko‘rsatkich turiga aylantiriladi.
3. Bo‘sh qiymat berish:
int *suxx = NULL;
int *r=0;
Birinchi satrda maxsus NULL o‘zgarmasi ishlatilgan, ikkinchi satrda 0 qiymat ishlatilgan. Ikkala holda ham ko‘rsatkich hech qanday obyektga murojaat qilmaydi. Bo‘sh ko‘rsatkich asosan ko‘rsatkichni aniq obyektga ko‘rsatyotganligi yoki yo‘qligini aniqlashda foydalaniladi.
4. Dinamik xotirada new amali bilan joy ajratish va uning manzilini ko‘rsatkichga berish:
int * n =new int; // birinchi operator;
int * m =new int(10); // ikkinchi operator;
int * q=new int [10]; // uchinchi operator.
Birinchi operatorda new amali yordamida dinamik xotirada int uchun yetarli joy ajratib olinib, uning manzili n ko‘rsatkichga yuklangan. Ko‘rsatkichning o‘zi uchun joy kompilyatsiya vaqtida ajratiladi.
Ikkinchi operatorda joy ajratishdan tashqari m manziliga boshlang‘ich qiymat - 10 sonini joylashtiradi.
Uchinchi operatorda int turidagi 10 element uchun joy ajratigan va uni boshlang‘ich manzili q ko‘rsatkichga beriladi. Bu misolda, aniqrog‘i massivga joy ajratilib, unga q nomi berilgan bo‘lib, keyinchalik shu nom orqali massiv elementlariga murojaat qilish mumkin.
Xotira new amali bilan ajratilgan bo‘lsa, u delete amali bilan bo‘shatilishi kerak:
delete n; delete m; delete [ ] q;
Agarda xotira new[] amali bilan ajratilgan bo‘lsa, uni bo‘shatish uchun delete[] amalini o‘lchovi ko‘rsatilmagan holda qo‘llash kerak.
Xotira bo‘shatilganligiga qaramasdan ko‘rsatkichni o‘zini qayta ishlatish mumkin. Buni quyidagi amallarda ko`rib chiqamiz.

Download 1.27 Mb.

Do'stlaringiz bilan baham:
1   ...   24   25   26   27   28   29   30   31   ...   45




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling