Kitob uchta qismdan iborat. "Strukturali dasturlash", "Obyektli-yo’nalishli dasturlash", "Standart kutubxonalar"


Ko'rsatgichlarni initsializatsiyalash



Download 333,2 Kb.
bet28/90
Sana10.07.2022
Hajmi333,2 Kb.
#770437
1   ...   24   25   26   27   28   29   30   31   ...   90
Bog'liq
C majmua

Ko'rsatgichlarni initsializatsiyalash

Ko'rsatgichlar ko’proq uyumlar estetlar deb ataladigan dinamik xotira bilan ishlashda foydalaniladi. Bu dasturni bajarish paytida ehtiyojlarga mos ravishda o'rin ajratish mumkin bo'lgan ozod xotira. Dinamik xotiraning ajratilgan qismlariga, ya'ni dinamik o'zgaruvchilarga kirish faqat ko'rsatgich orqali amalga oshadi. Dinamik o'zgauvchilar yashash davri – yaratish nuqtasidan dastur oxirigacha yoki xotira oshkora ozod bo'lguncha davom etadi. C++ da dinamik xotira bilan ishlashning ikkita usuli ishlatiladi. Birinchisi malloc funksiyalar oilasidan foydalanadi va C dan meros bo'lib qolgan, ikkinchisi new va delete amallarida foydalanadi.


Ko'rsatgichni aniqlashda uning initsializatsiyasini bajarishga xarakat qilish lozim, ya'ni boshlang'ich qiymatni berish lozim. Initsializatsiyalanmagan ko'rsatgichlardan maqsadsiz foydalanish – dasturlarda tarqalgan xatolar manbai. Initsializator ko'rsatgich nomidan so'ng oddiy qavslarda yoki tenglik belgisidan keyin yoziladi.
Ko'rsatgichni initsializatsiyalashni quyidagi usullari mavjud:
1. Ko'rsatgichi mavjud obyektning adresini berish:

  • adresni olish amali yordamida:

int a = 5; // butun o'zgaruvchi
int* p = &a; // ko'rsatgichga adres yoziladi
int* p (&a); // o'sha boshqa usul bilan



  • boshqa initsializatsiyalangan ko'rsatgich qiymati yordamida:

int* r = p;



  • adres deb talqin etiluvchi massiv yoki funksiya nomi yordamida:

int b[10]; // massiv
int* t = b; // massiv boshi adresini berish
-
void f(int a ) { /* - */ } // funksiya ta'rifi
void (*pf)(int); // ko'rsatgishli funksiya
pf = f; // funksiya adresini berish

2. Ko'rsatgichga xotira soxasi adresini oshkora berish:


char* vp = (char *)0xB8000000
Bu yerda 0xB8000000 – o'n oltilik konstanta, (char *) – tipni keltirish amali: konstanta “char ko'rsatgich” tipiga almashtirildi.

3. Bo'sh qiymatni berish:


int* suxx = NULL;
int* rulez = 0;
Birinchi satrida C ning ba'zi sarlavhali fayllarida nolga teng ko'rsatgich sifatifa aniqlangan NULL konstanta ishlatiladi. Oddiy 0 dan foydalanish tavsiya etiladi, chunki int tipdagi bu qiymat kontekstga mos ravishda standart usullar bilan to'g'ri almashtirilishi mumkin. Nol adresli obyektlar yo'qligi kafolatlangani uchun bo'sh ko'rsatgich konkret obyektga murojaat qilyaptimi yoki yo'q ekanligini tekshirish uchun ishlatish mumkin.

4. Dinamik xotira maydonini ajratish va uning adresini ko'rsatgichga berish:



  • new amali yordamida:

int* n = new; // 1
int* m = new int (10); // 2
int* q = new int (10); // 3

  • malloc funksiyasi yordamida:

int* u = (int *)malloc(sizeof (int)); // 4
1-operatorda new amali int tipidagi miqdorlarni joylashtirish uchun yetarli dinamik xotira maydonini ajratishni bajaradi va bu maydon boshlanishi adresini n o'zgaruvchiga yozadi. n o'zgaruvchining o'ziga xotira (ko'rsatgichni joylashtirish uchun yetarli o'lchamda) kompilyatsiya bosqichida ajratiladi.
2-operatorda yuqoridagi amallardan tashqari 10 qiymat bilan ajratilgan dinamik maydon initsializatsiya bajariladi.
3-operatorda new 10 ga int (10 elementdan iborat massiv) tipidagi xotirani ajratishni bajaradi va bu maydon boshlanishini massiv nomi deb talqin etiladigan q o'zgaruvchiga yoziladi. Nom orqali massivning ixtiyoriy elementiga murojaat qilish mumkin.
Agar xotira ajratilmasa, standartga ko'ra bad_alloc favqulotda hol yuz berishi lozim, kompilyatorlar eski talqinlari 0 ni qaytaradi.
4-operatorda 1-operatordagi ishlar amalga oshiriladi, lekin C kutubxonasidan meros qoldirilgan malloc xotira ajratish funksiyasi yordamida bajariladi. Funksiyaga bitta parameter – ajratilgan xotiraning baytlardagi miqdori beriladi. (int*) konstruksiya talab qilinuvchi tipga funksiya bilan qaytariluvchi ko'rsatgich tipiga keltirish uchun foydalaniladi. Agar xotira ajratishga erishilmasa, funksiya 0 ni qaytaradi.
new amalini foydalanish malloc funksiyasiga qaraganda afzalroq, ayniqsa obyektlar bilan ish ko'rganda.
new amali yordamida ajratilgan xotirani tozalash delete yordamida, malloc funksiya yordamida ajratilgan xotirani esa – free funksiya bilan tozalash lozim. Bunda ko'rsatgich – o'zgaruvchi saqlanadi va takroran initsializatsiyalanishi mumkin. Yuqorida keltirilgan dinamik o'zgaruvchilar quyidagicha yuqotiladi:
delete n; delete m; delete [] q; free (u);
Agar xotira new [] yordamida ajratilgan bo'lsa, u holda xotirani tozalash uchun delete [] ni qo'llash zarur. Massiv o'lchami bunda ko'rsatilmaydi. Agar kvadrat qavslar bo'lmasa, u holda xato haqida hech qanday xabar berilmaydi, lekin massivning birinchi elementi ozod kabi belgilanadi, qolganlari keying amallar uchun qo'llab bo'lmaydi. Bunday xotira yacheykalari axlat (musor) deb ataladi.


DIQQAT
Agar o'zgaruvchi – ko'rsatgich o'z amal qilish sohasidan chiqsa, unga ajratilgan xotira tozalanadi. Demak, ko'rsatgich murojaat qiladigan dinamik o'zgaruvchiga kirib bo'lmaydi. Bunda dinamik o'zgaruvchidagi xotira bo'shamaydi. “Axlat” hosil bo'lishiga boshqa misol – initsializatsiyalangan ko'rsatgichga boshqa ko'rsatgich qiymati beriladi. Bunda eski qiymat izsiz yo'qoladi.

Yulduzchalar, oddiy va kvadrat qavslar kombinatsiyalari yordamida murakkab tiplar va murakkab tiplarga ko'rsatgichlarni tavsiflash mumkin, masalan:


int *(*p[10])();
operatorda int ga ko'rsatgichlarni qaytaruvchi parametrsiz funksiyaga 10 ta ko'rsatgichda iborat masiiv e’lon qilinadi.
Jimlik bo’yicha kvadrat va oddiy qavslar bir xil yulduzchaga qaraganda esa ko’proq imtiyozga ega va chapdan o’ngga qaraladi. Qarash tartibini o’zgartirish uchun doiraviy qavslar ishlatiladi.
Murakkab tavsiflarni talqin qilishda “ichkaridan tashqariga” qoidasiga tayanish lozim:

  1. agar chapdan o’nga kvadrat qavslar bo’lsa bu massiv, agar qavslar oddiy bo’lsa - bu funksiya;

  2. agar chapda yulduzcha bo’lsa, bu oldin talqin etilgan konstruksiyaga ko’rsatgich;

  3. agar o’ngda yotuvchi doiraviy qavs uchrasa, yuqorida keltirilgan qoidalarni qavslar ichida so’ngra tashqariga qo’llash lozim;

  4. oxirgi navbatda til spetsifikatori talqin qiladi.

Yuqorida keltirilgan tavsif uchun talqin tartibi raqamlar bilan ko’rsatilgan:
int *(*p[10])();
5 4 2 1 3 // tavsifni talqin etish tartibi



Download 333,2 Kb.

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




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish