4. Ko‘p o‘lchovli massivlar Ko‘p o‘lchovli massivlar
C++ da massiv deganda ko‘rsatkichni tushunish mumkin. Ko‘rsatkich esa ixtiyoriy turda bo‘lishi mumkin, ya’ni massiv ixtiyoriy turdagi elementlardan tashkil topishi mumkin, jumladan, massivdan iborat ko‘rsatkich bo‘lishi ham mumkin. Boshqa massivlardan tashkil topgan massivlar ko‘p o‘lchovli deyiladi. Bunday massivlarni e’lon qilganda kompyuter xotirasida bir nechta har xil ob’yektlar hosil qilinadi. Masalan, Ikki o‘lchovli int arr[4][3] massivini e’lon qilish bajarilganda xotirada arr o‘zgaruvchining qiymatlarini saqlash uchun joy ajratiladi, ularning har biri esa to‘rtta ko‘rsatkichdan iborat massivning ko‘rsatkichi bo‘ladi. To‘rtta ko‘rsatkichdan iborat bu massiv uchun ham xotira ajratiladi. To‘rtta ko‘rsatkichning har biri int turidagi uchta elementdan iborat massivning manzilidan (adres) tashkil topadi. Demak, kompyuter xotirasida int turidagi to‘rtta massivni saqlash uchun to‘rtta bo‘lak ajratiladi. Ularning har biri esa uchta elementdan tashkil topadi. Bunday xotira ajratish quyidagi sxemada ko‘rsatilgan:
Arr
|
|
|
|
|
↓
|
|
|
|
|
arr[0]
|
à
|
arr[0][0]
|
arr[0][1]
|
arr[0][2]
|
arr[1]
|
à
|
arr[1][0]
|
arr[1][1]
|
arr[1][2]
|
arr[2]
|
à
|
arr[2][0]
|
arr[2][1]
|
arr[2][2]
|
arr[3]
|
à
|
arr[3][0]
|
arr[3][1]
|
arr[3][2]
|
Shunday qilib, arr[4][3] e’lon qilish dasturda uchta har xil ob’yektni hosil qiladi: arr identifikatorli ko‘rsatkich, to‘rtta ko‘rsatkichdan iborat nomsiz massiv va int turidagi 12 ta sondan iborat nomsiz massiv. Nomsiz massivlarga murojaat qilish uchun arr ko‘rsatkichli manzil ifodalari ishlatiladi. Ko‘rsatkichlar massivining elementlariga murojaat qilish arr[2] yoki *(arr+2) shaklida bitta indeks ifodasini ko‘rsatish bilan amalga oshiriladi. Int turidagi ikki o‘lchovli sonlar massiviga murojaat qilish uchun arr[1][2] yoki unga ekvivalent *(*(arr+1)+2) va (*(arr+1))[2] ko‘rinishidagi ikkita indeksli ifoda ishlatilishi zarur. Shuni nazarda tutish kerakki, C tilining sintaksisi nuqtai nazaridan arr ko‘rsatkich va arr[0], arr[1], arr[2], arr[3] ko‘rsatkichlar o‘zgarmas (konstanta) hisoblanadi va ularni dasturning bajarilish paytida o‘zgartirish mumkin emas.
Uch o‘lchovli massivlarni joylashtirish ham shu kabi amalga oshiriladi. float arr3[3][4][5] e’lon qilishi float turidagi oltmishta sondan iborat uch o‘lchovli massivning o‘zidan tashqari float turidagi to‘rtta ko‘rsatkichdan iborat massivni, float ga ko‘rsatuvchi ko‘rsatkichlar massivini ko‘rsatuvchi uchta ko‘rsatkichlar massividan va float ga ko‘rsatkichlar massivining massiviga ko‘rsatkich.
Ko‘p o‘lchovli massiv elementlarini o‘rnatganda ular xotirada qator bo‘yicha ketma-ket joylashadi, ya’ni oxirgi indeksi barchasidan tezroq o‘zgaradi, birinchisi esa sekin o‘zgaradi. Bunday tartib ko‘p o‘lchovli massivning ixtiyoriy elementiga uning birinchi elementi manzilidan va faqat bitta indeksli ifodadan foydalanib murojaat qilish imkonini beradi.
Masalan, arr[1][2] elementga int *ptr2=arr[0] shaklidagi ptr2 ko‘rsatkich yordamida ptr2[1*4+2] (bu erda 1 va 2 ishlatilayotgan element indekslari, 4 esa qatordagi elementlar soni) murojaat kabi yoki ptr2[6] kabi amalga oshirish mumkin. E’tibor berish lozimki, tashqaridan qaraganda arr[6] ko‘rinishdagi murojaatni bajarish mumkin emasdek tuyuladi, chunki 6 indeksli ko‘rsatkich mavjud emas. Uch o‘lchovli massivning arr3[2][3][4] elementiga murojaat qilish uchun, ptr3[3*2+4*3+4] yoki ptr3[22] ko‘rinishidagi bitta indeksli ifoda yordamida float *ptr3=arr3[0][0] ko‘rinishida e’lon qilingan ko‘rsatkichdan foydalanish mumkin.
4-misol: «Sirt»
Dostları ilə paylaş: |