Ko`p o`lchovli statik massivlar

|
Ko`p o`lchovli statik massivlar
|
bet | 2/19 | Sana | 17.02.2024 | Hajmi | 88,92 Kb. | | #158115 |
Bog'liq C da massivlar bilan ishlash-fayllar.orgKo`p o`lchovli statik massivlar
C++ tilida massivlar elementining turiga cheklovlar qo`yilmaydi , lekin bu turlar chekli o`lchamdagi obyektlarning turi bo`lishi kerak.
CHunki kompliyator massivning hotiradan qancha joy (bayt) egallashini xisoblay olish kerak. Xususan , massiv komponentasi massiv bo`lish mumkin (“vektorlar - vektori”) , natijada matritsa deb nomlanuvchi ikki o`lchamli massiv xosil bo`ladi.
Agar matritsaning elementi xam vektor bo`lsa , uch o`lchamli massivlar - kub xosil bo`ladi. Shu yo`l bilan yechilayotgan masalaga bog`liq ravishda ixtiyoriy o`lchamdagi massivlarni yaratish mumkin.
Ikki o`lchamli massivda birinchi indeks satrlar sonini , ikkinchisi esa ustunlar sonini bildiradi.
Birinchi satrning dastlabki elementi a10 – a biri nol element deb o`qiladi . a o`n deyilmaydi. M ta satr n ta ustunga ega bo`lgan massivga (mхn)o`lchamli massiv deyiladi. Agar m=n (satrlar va ustunlar soni teng) bo`lsa kvadrat massiv deyiladi .
Ikki o`lchamli massivning sintaksi quyidagi ko`rinishda bo`ladi:
[][]
Masalan, 10Х20 o`lchamli xaqiqiy sonlar massivning e`loni:
Float a[10][20];
Dinamik massivlar bilan ishlash
Statik massivlarning kamchiliklari shundaki, ularning olchamlari oldindan malum bolishi kerak, bundan tashqari bu olchamlar berilganlarga ajratilgan xotira segmentining olchami bilan chegaralangan . Ikkinchi tomondan, yetarlicha kata olchamdagi massiv elon qilinib, konkret masala yechilishida ajratilgan xotira toliq ishlatilmasligi mumkin. Bu kamchiliklar dinamik massivlardan foydalanish orqali bartaraf etiladi, chunki ular programma ishlashi jarayonida kerak bolgan olchamdagi massivlarni yaratish va zarurat qolmaganda yoqotish imkoniyatini beradi. Dinamik massivlarga xotira ajratish uchun malloc(), calloc() funksiyalaridan yoki neu operatoridan foydalanish mumkin. Dinamik obyektga ajratilgan xotirani boshatish uchun delete operatori ishlatiladi. Yuqorida qayd qilingan funksiyalar <> kutubxonasida joylashgan. Malloc() funksiyasining sintaksisi Void * malloc(size_t size); Korinishida bolib, u hotiraning uyum qismidan size bayt olchamdagi uzluksiz sohani ajratadi. Agar xotira ajratish muvaffaqiyatli bolsa, malloc() funksiyasi ajratilgan sohaning boshlanish adresini qaytaradi. Talab qilingan xotirani ajratish muvaffaqiyatli bolsa , funksiya NULL qiymatni qaytaradi. Sintaksisdan korinib turibdiki, funksiya void turidagi qiymat qaytaradi.Amalda esa konkret turdagi obyekt uchun xotira ajratish zarur boladi. Buning uchun void konkret turga keltirish texnologiyasidan foydalaniladi. Masalan , butun turdagi uzunligi 3 ga teng massivga joy ajratishni
quyidagicha amalga oshirish mumkin:
Int * pint=(int*)malloc(3*sizeof(int));
Calloc() funksiyasi malloc funksiyasidan farqli ravishda massiv uchun joy ajratishdan tashqari massiv elementlarini 0 qiymati bilan initsializatsiya qiladi.Bu funksiya sintaksisi .Void * calloc(size_t num, size_ t size);Korinishida bolib , num parametri ajratilgan sohada nechta element borligini, size xar bir element olchamini bildiradi.
Free() xotirani boshatish funksiyasi ochiriladigan xotira bolagiga korsatkich bolgan yagona parametrga ega boladi: oid free(void* block);Free() funksiyasi parametrining void turida bolishi ixtiyoriy turdagi xotira bolagini ochirish imkonini beradi .
|
| |