logo

Massivlar va ko’rsatkichlar

Загружено в:

08.08.2023

Скачано:

0

Размер:

21.0673828125 KB
Massivlar va ko’rsatkichlar
Reja:
 
1.       Bir o‘lchovli	 massivlar.
2.       Ko‘p	
 o‘lchamli	 massivlar.
3.       Satrlar	
 massiv	 sifatida.
4.       Satrlar	
 bilan	 ishlovchi	 funksiyalar.
  Massiv   tushunchasi.   Massiv bu	 bir	 tipli	 nomerlangan	 ma’lumotlar
jamlanmasidir.	
 Massiv	 indeksli	 o‘zgaruvchi	 tushunchasiga	 mos	 keladi.	 Massiv
ta’riflanganda	
 tipi,	 nomi	 va	 indekslar	 chegarasi	 ko‘rsatiladi.	 Masalan	 type
turidagi	
 length	 ta	 elementdan	 iborat	 a nomli	 massiv	 shunday	 e’lon	 qilinadi:
type	
 a[length];
Bu	
 maxsus	 a[0],	 a[1],	 ...,	 a[length	 -1]	 nomlarga	 ega	 bo‘lgan	 type	 turidagi
o‘zgaruvchilarning	
 e’lon	 qilinishiga	 to‘g‘ri	 keladi.
Massivning	
 har	 bir	 elementi	 o‘z	 raqamiga	 - indeksga	 ega.	 Massivning	 x-
nchi	
 elementiga	 murojaat	 indekslash	 operatsiyasi	 yordamida	 amalga	 oshiriladi:
int	
 x=...;                     //butun	 sonli	 indeks
TYPE	
 value=a[x];           //ch-nchi	 elementni	 o‘qish
a[x]=value;                 //x-yxb	
 elementga	 yozish
Indeks	
 sifatida	 butun	 tur	 qiymatini	 qaytaradigan	 har	 qanday	 ifoda
qo‘llanishi	
 mumkin:	 char,	 short,	 int,	 long.	 C++	 da	 massiv	 elementlarining
indekslari	
 0 dan	 boshlanadi	 (1	 dan	 emas),	 length	 elementdan	 iborat	 bo‘lgan
massivning	
 oxirgi	 elementining	 indeksi	 esa	 - bu	 length	 -1	 (length	 emas).
Massivning	
 int	 z[3]	 shakldagi	 ta’rifi,	 int	 tipiga	 tegishli	 z[0],z[1],z[2]
elementlardan	
 iborat	 massivni	 aniqlaydi.
Massiv	
 chegarasidan	 tashqariga	 chiqish	 (ya’ni	 mavjud	 bo‘lmagan
elementni	
 o‘qish/yozishga	 urinish)	 dastur	 bajarilishida	 kutilmagan	 natijalarga
olib	
 kelishi	 mumkin.	 SHuni	 ta’kidlab	 o‘tamizki,	 bu	 eng	 ko‘p	 tarqalgan
xatolardan	
 biridir. Agar massiv	 initsializatsiya	 qilinganda	 elementlar	 chegarasi	 ko‘rsatilgan
bo‘lsa	
 , ro‘yxatdagi	 elementlar	 soni	 bu	 chegaradan	 kam	 bo‘lishi	 mumkin,	 lekin
ortiq	
 bo‘lishi	 mumkin	 emas.
Misol	
 uchun	 int	 a[5]={2,-2}.	 Bu	 holda	 a[0]	 va	 a[1]	 qiymatlari	 aniqlangan
bo‘lib,	
 mos	 holda	 2 va	 –2	 ga	 teng.	 Agar	 massiv	 uzunligiga	 qaraganda	 kamroq
element	
 berilgan	 bo‘lsa,	 qolgan	 elementlar	 0 hisoblanadi:
int	
 a10[10]={1,	 2,	 3,	 4};         //va	 6 ta	 nol
Agar	
 nomlangan	 massivning	 tavsifida	 uning	 o‘lchamlari	 ko‘rsatilmagan
bo‘lsa,	
 kompilyator	 tomonidan	 massiv	 chegarasi	 avtomatik	 aniqlanadi:
int	
 a3[]={1,	 2,	 3};          
Bir	
 o‘lchamli	 massivlarni	 funksiya	 parametrlari	 sifatida	 uzatish.	 Massivdan
funksiya	
 parametri	 sifatida	 foylalanganda,	 funksiyaning	 birinchi	 elementiga
ko‘rsatkich	
 uzatiladi,	 ya’ni	 massiv	 hamma	 vaqt	 adres	 bo‘yicha	 uzatiladi.	 Bunda	 
massivdagi	
 elementlarning	 miqdori	 haqidagi	 axborot	 yo‘qotiladi,	 shuning	 uchun
massivning	
 o‘lchamlari	 haqidagi	 ma’lumotni	 alohida	 parametr	 sifatida	 uzatish
kerak.
Funksiyaga	
 massiv	 boshlanishi	 uchun	 ko‘rsatkich	 uzatilgani	 tufayli	 (adres
bo‘yicha	
 uzatish),	 funksiya	 tanasining	 operatorlari	 hisobiga	 massiv	 o‘zgarishi
mumkin.
Funksiyalarda	
 bir	 o‘lchovli	 sonli	 massivlar	 argument	 sifatida	 ishlatilganda
ularning	
 chegarasini	 ko‘rsatish	 shart	 emas.
Funksiyalarda	
 bir	 o‘lchovli	 sonli	 massivlar	 argument	 sifatida	 ishlatilganda
ularning	
 chegarasini	 ko‘rsatish	 shart	 emas. Ko‘p o‘lchovli	 massivlar	 ta’rifi.   Ikki	 o‘lchovli	 massivlar	 matematikada
matritsa	
 yoki	 jadval	 tushunchasiga	 mos	 keladi.	 Jadvallarning	 insializatsiya
qilish	
 qoidasi,	 ikki	 o‘lchovli	 massivning	 elementlari	 massivlardan	 iborat
bo‘lgan	
 bir	 o‘lchovli	 massiv	 ta’rifiga	 asoslangandir.
Misol	
 uchun	 ikki	 qator	 va	 uch	 ustundan	 iborat	 bo‘lgan	 xaqiqiy	 tipga
tegishli	
 d massiv	 boshlang‘ich	 qiymatlari	 quyidagicha	 ko‘rsatilishi	 mumkin:
float	
 d[2][3]={(1,-2.5,10),(-5.3,2,14)};
Bu	
 yozuv	 quyidagi	 qiymat	 berish	 operatorlariga	 mosdir:
d[0][0]=1;d[0][1]=-2.5;d[0][2]=10;
d[1][0]=-5.3;d[1][1]=2;d[1][2]=14;
Bu	
 qiymatlarni	 bitta	 ro‘yxat	 bilan	 xosil	 qilish	 mumkin:
float	
 d[2][3]={1,-2.5,10,-5.3,2,14};
Initsializatsiya	
 yordamida	 boshlang‘ich	 qiymatlar	 aniqlanganda	 massivning
hamma	
 elementlariga	 qiymat	 berish	 shart	 emas.
        Misol	
 uchun:	 int	 x[3][3]={(1,-2,3),(1,2),(-4)}.
Bu	
 yozuv	 quyidagi	 qiymat	 berish	 operatorlariga	 mosdir:
x[0][0]=1;x[0][1]=-2;x[0][2]=3;
x[1][0]=-1;x[1][1]=2;x[2][0]=-4;
Initsializatsiya	
 yordamida	 boshlang‘ich	 qiymatlar	 aniqlanganda	 massivning
birinchi	
 indeksi	 chegarasi	 ko‘rsatilishi	 shart	 emas,	 lekin	 qolgan	 indekslar
chegaralari	
 ko‘rsatilishi	 shart.
Misol	
 uchun: double x[][2]={(1.1,1.5),(-1.6,2.5),(3,-4)}
Bu	
 misolda	 avtomatik	 ravishda	 katorlar	 soni	 uchga	 teng	 deb	 olinadi.
Funksiyaga	
 ko‘p	 o‘lchamli	 massivlarni	 uzatish.	 Ko‘p	 o‘lchamli
massivlarni	
 funksiyaga	 uzatishda	 barcha	 o‘lchamlar	 parametrlar	 sifatida
uzatilishi	
 kerak.	 C++	 da	 ko‘p	 o‘lchamli	 massivlar	 aniqlanishi	 bo‘yicha	 mavjud
emas.	
 Agar	 biz	 bir	 nechta	 indeksga	 ega	 bo‘lgan	 massivni	 tavsiflasak	 (masalan,
int	
 mas	 [3][4]),	 bu	 degani,	 biz	 bir	 o‘lchamli	 mas	 massivini	 tavsifladik,	 bir
o‘lchamli	
 int	 [4]	 massivlar	 esa	 uning	 elementlaridir
Misol:   Kvadrat	
 matritsani	 uzatish	 (transportirovka	 qilish)
Agar	
 void	 transp(int	 a[][],int	 n){.....}	 funksiyasining	 sarlavhasini	 aniqlasak,
bu	
 holda	 biz	 funksiyaga	 noma’lum	 o‘lchamdagi	 massivni	 uzatishni	 xohlagan
bo‘lib	
 qolamiz.	 Aniqlanishiga	 ko‘ra	 massiv	 bir	 o‘lchamli	 bo‘lishi	 kerak,	 hamda
uning	
 elementlari	 bir	 xil	 uzo‘nlikda	 bo‘lishi	 kerak.	 Massivni	 uzatishda	 uning
elementlarining	
 o‘lchamlari	 haqida	 ham	 biron	 narsa	 deyilmagan,	 shuning	 uchun
kompilyator	
 xato	 chiqarib	 beradi.
Bu	
 muammoning	 eng	 sodda	 echimi	 funksiyani	 quyidagicha	 aniqlashdir:
void	
 transp(int	 a[][4],int	 n){.....},	 bu	 holda	 har	 bir	 satr	 o‘lchami	 4 bo‘ladi,
massiv	
 ko‘rsatkichlarining	 o‘lchami	 esa	 hisoblab	 chiqariladi.
Satrlar.	
 C++	 da	 belgili	 ma’lumotlar	 uchun	 char	 turi	 qabul	 qilingan.	 Belgili
axborotni	
 taqdim	 etishda	 belgilar,	 simvolli	 o‘zgaruvchilar	 va	 matniy
konstantalar	
 qabul	 qilingan.
Misollar:
const	
 char	 c= ' c ' ;//belgi	 - bir	 baytni	 egallaydi,	 uning	 qiymati	 o‘zgarmaydi char a,b;//belgili	 o‘zgaruvchilar,	 bir	 baytdan	 joy	 egallaydi,	 qiymatlari
o‘zgaradi.
  C++	
 dagi	 satr	 - bu	 nul-belgi	 - \0	 (nul-terminator)-	 bilan	 tugallanuvchi
belgilar	
 massivi.	 Nul-terminatorning	 holatiga	 qarab	 satrning	 amaldagi	 uzunligi
aniqlanadi.	
 Bunday	 massivdagi	 elementlar	 soni,	 satr	 tasviriga	 qaraganda,	 bittaga
ko‘p.
Simvolli	
 massivlar	 quyidagicha	 initsializatsiya	 qilinadi:
char	
 capital[]= " TASHKENT " ;	 Bu	 holda	 avtomatik	 ravishda	 massiv
elementlari	
 soni	 aniqlanadi	 va	 massiv	 oxiriga	 satr	 ko‘chirish   '\0' simvoli
qo‘shiladi.
YUqoridagi	
 initsializatsiyani	 quyidagicha	 amalga	 oshirish	 mumkin:
char   capital[]={ 'T' , 'A' , 'S' , 'H' , 'K' , 'E' , 'N' , 'T' , '\0' };
Bu	
 holda	 so‘z	 oxirida   '\0' simvoli	 aniq	 ko‘rsatilishi	 shart.
Qiymat	
 berish	 operatori	 yordamida	 satrga	 qiymat	 berish	 mumkin	 emas.
Satrni	
 massivga	 yoki	 kiritish	 paytida	 yoki	 nomlantirish	 yordamida	 joylashtirish
mumkin.
Funksiyalar	
 va	 satrlar.   Funksiyalarda	 satrlar	 ishlatilganda	 ularning
chegarasini	
 ko‘rsatish	 shart	 emas.	 Satrlarning	 uzunligini	 hisoblash	 len
funksiyasii	
 quyidagicha	 ta’riflash	 mumkin:
int	
 len(char	 c[])
{	
 int	 m=0;
for(m=0;c[m]!=’0’;m++);
return
 m; };
Bu funksiyaning	 standart	 varianti	 strlen	 deb	 ataladi	 va	 bu	 funksiyadan
foydalanish	
 uchun	 string.h	 sarlavxali	 faylidan	 foydalanish	 lozim.
So‘zlar	
 massivini	 kiritish.	 C++	 tilida	 so‘zlar	 massivlari	 ikki	 o‘lchovli
simvolli	
 massivlar	 sifatida	 ta’riflanadi.	 Misol	 uchun:
char	
 name[4][5].
Bu	
 ta’rif	 yordamida	 har	 biri	 5 ta	 harfdan	 iborat	 bo‘lgan	 4 ta	 so‘zli	 massiv
kiritiladi.	
 So‘zlar	 massivlari	 quyidagicha	 initsializatsiya	 qilinishi	 mumkin:
  char	
 Name[3][8]={   " Anvar " , " Mirkomil " , " YUsuf " }.
  Bu	
 ta’rifda	 har	 bir	 so‘z	 uchun	 xotiradan	 8 bayt	 joy	 ajratiladi	 va	 har	 bir	 so‘z
oxiriga   '   \0 '   belgisi	
 qo‘yiladi.
So‘zlar	
 massivlari	 initsializatsiya	 qilinganda	 so‘zlar	 soni	 ko‘rsatilmasligi
mumkin.	
 Bu	 holda	 so‘zlar	 soni	 avtomatik	 aniqlanadi:
char	
 comp[][9]={   " kompьyuter " , " printer " , " kartridj " }.
Funksiyalar	
 va	 so‘zlar	 massivlar.   Satrli	 massivlar	 funksiya	 argumenti
sifatida	
 ishlatilganda	 satrlarning	 umumiy	 uzunligi	 aniq	 ko‘rsatilishi	 shartdir.
S T R I N G   T I P I .   S A T R L A R   B I L N   I S H L A S H   U C H U N
S T A N D A R T   B I B L I O T E K A G A
K I R U V C H I   S T R I N G   M U R A K K A B   T U R I D A N
F O Y D A L A N I S H   Q U L A Y D I R .
Bu	
 tipdan	 foydalanish	 uchun	 quyidagi	 sarlavxali	 faylni	 ulash	 lozim:
#include	
 <string>
Satrlarni
 ta’riflashga	 misollar: string st(	 "BAXO	 \n"	 ); //simvollar	 satri	 bilan	 initsiallash
string	
 st2;	 // bo‘sh	 satr
string	
 st3(	 st ); shu	 tipdagi	 o‘zgaruvchi	 bilan	 initsiallash
S A T R L A R   U S T I D A   A M A L L A R .   S A T R L A R   U S T I D A
Q U Y I D A G I   A M A L L A R   A N I Q L A N G A N :
      qiymat	
 berish	 (=);
      konkatenatsiya
 yoki	 satrlarni	 ulash	 (+);
      qiymat	
 berib	 qo‘shish	 amali	 (+=)
      ikki	
 amal	 ekvivalentlikni	 tekshirish	 uchun	 (==)	 va	 (!=);
      indeks	
 olish	 ([]).
      solishtirish
 amallari(	 <,	 <=,>,	 >=);
  Ko‘rsatkichlar.   Ko‘rsatkich	
 - xotira	 uyasining	 unikal	 adresini	 saqlaydigan	 
o‘zgaruvchi.	
 Ko‘rsatkich	 operativ	 xotiradagi	 biron-bir	 o‘zgaruvchi	 mavjud	 
bo‘lishi	
 mumkin	 bo‘lgan	 biron-bir	 joyni	 belgilaydi.	 Ko‘rsatkichlarning	 
qiymatlarini	
 o‘zgartirish,	 turli	 variantlarda	 qo‘llash	 mumkinki,	 bu	 dasturning	 
moslashuvchanligini	
 oshiradi.
Ko‘rsatkich	
 odatda	 tipga	 ega	 bo‘lib	 quyidagicha	 e’lon	 qilinadi:
<turning	
 nomi>*<ko‘rsatkichning	 nomi>=<dastlabki	 qiymat>
Misol	
 uchun:
int	
 *pr;
char
 *alfa;
Bu
 holda	 ko‘rsatkichlar	 noaniq	 qiymatga	 ega	 bo‘ladi.	 Ko‘rsatkichlar
ta’riflanganda	
 ularning	 tiplari	 ko‘rsatilishi	 shart.	 Ko‘rsatkichlarni	 initsializatsiya
kilish	
 ya’ni	 boshlang‘ich	 qiymatlarini	 kiritish	 mumkin.	 Ma’lum	 turdagi	 biron-
bir	
 o‘zgaruvchi	 adresi	 yoki	 NULL	 qiymat	 dastlabki	 qiymat	 bo‘lishi	 mumkin. Ko‘rsatkichlarga boshlang‘ich	 maxsus	 NULL	 qiymati	 berilsa	 bunday
ko‘rsatkich	
 bo‘sh	 ko‘rsatkich	 deb	 ataladi.
Biron-bir	
 o‘zgaruvchi	 adresini	 olish	 hamda	 uni	 ko‘rsatkichga	 qiymat
sifatida	
 berish	 uchun	 «&»	 operatori	 qo‘llanadi.
Misol:
int	
 I=100;
int*p=&I;
unsigned	
 longint	 *ul=NULL;
Teskari	
 operator	 - «*»	 bo‘lib,	 ko‘rsatkichda	 saqlanayotgan	 adres	 bo‘yicha
uya	
 qiymatiga	 murojaat	 qilish	 imkonini	 beradi.
Misol:
int	
 I=100;
int*p=&I
int
 J=*p;
Ilova	
 tushunchasi.	 Ilova	 (ssыlka)	 – ilova	 ta’rifirda	 ko‘rsatilgan	 ob’ekt
nomining	
 sinonimi.
Ilovani
 e’lon	 qilish	 shakli
tur	
 &	 ism	 =ism_ob’ekt;
Misollar:
int	
 x;	 // o‘zgaruvchining	 aniqlash
int&	
 sx=x;	 //x	 o‘zgaruvchiga	 iqtibosni	 aniqlash const char	 &	 CR= ' \n ' ;	 //konstantaga	 iqtibosni	 aniqlash
Ilovalar	
 bilan	 ishlash	 qoidalari.
1)	
 O‘zgaruvchi	 ilova,	 agar	 u funksiya	 parametri	 bo‘lmasa,	 extern	 sifatida
tavsiflanmagan	
 bo‘lsa	 yoki	 sinf	 maydoniga	 ilova	 qilmasa,	 o‘ziga	 tavsif
berilayotganda	
 ochiq-oydin	 nomlanishi	 kerak.
2)	
 Nomlangandan	 so‘ng,	 ilovaga	 boshqa	 qiymat	 berilishi	 mumkin	 emas.
3)	
 Ilovalarga	 ko‘rsatkichlar,	 ilovalar	 massivlari	 va	 ilovalarga	 ilovalar
bo‘lishi	
 mumkin	 emas.
4)	
 Ilova	 ustida	 o‘tkazilgan	 operatsiya	 o‘zi	 ilova	 qilayotgan	 qiymatning
o‘zgarishiga	
 olib	 keladi
Ko‘rsatkichlar	
 ustida	 o‘tkaziladigan	 operatsiyalar.	 Ko‘rsatkichlar	 ustida
unar	
 operatsiyalar	 bajarish	 mumkin:	 inkrement	 va	 dekrement	 ++	 va	 --
operatsiyalarini	
 bajarishda,	 ko‘rsatkich	 qiymati	 ko‘rsatkich	 murojaat	 qilgan	 tur
uzunligiga	
 ko‘payadi	 yoki	 kamayadi.
Misol:
int*ptr,	
 a[10];
ptr=&a[5];
ptr++;       */	
 = a[6]*/	 elementining	 adresiga
ptr--;       */	
 = a[5]*/	 elementining	 adresiga
Qo‘shish	
 va	 ayirish	 binar	 operatsiyalarida	 ko‘rsatkich	 va	 int	 turining
qiymati	
 ishtirok	 etishi	 mumkin.	 Bu	 operatsiya	 natijasida	 ko‘rsatkich	 qiymati
dastlabkisidan	
 ko‘rsatilgan	 elementlar	 soniga	 ko‘proq	 yoki	 kamroq	 bo‘ladi.
Misol: int*ptr1, *ptr2,	 a[10];
int	
 i=2;
ptr1=a+(i+4);       /*	
 = a[6]*/	 elementining	 adresiga
ptr2=ptr1-i;         /*	
 = a[4]*/	 elementining	 adresiga
Ayirish	
 operatsiyasida	 bitta	 turga	 mansub	 bo‘lgan	 ikkita	 ko‘rsatkich
ishtirok	
 etishi	 mumkin.	 Operatsiya	 natijasi	 int	 turiga	 ega	 hamda	 kamayuvchi	 va
ayiruvchi	
 o‘rtasidagi	 dastlabki	 tur	 elementlarining	 soniga	 teng,	 bundan	 tashqari
agar	
 birinchi	 adres	 kichikroq	 bo‘lsa,	 u holda	 natija	 manfiy	 qiymatga	 ega	 bo‘ladi.
Misol:
int	
 *ptr1,	 *ptr2,	 a[10];
int	
 i;
ptr1=a+4;
ptr2=a+9;
i=ptr1-ptr2;	
 /*=5	 */
i=ptr1-ptr2;	
 /*=-5	 */
Funksiyalarni	
 chaqirishda	 foydalanish.	 C++   tili	 sintaksisiga	 ko‘ra
funksiyaga	
 ko‘rsatkich	 funksiya	 adresini	 aks	 ettiruvchi	 o‘zgaruvchi	 yoki
ifodadir.	
 Funksiyaga	 ko‘rsatkich	 bajariluvchi	 qiymati	 funksiya	 kodining	 birinchi
bayti	
 adresidir.	 Funksiyaga	 ko‘rsatkichlar	 ustida	 arifmetik	 amallar	 bajarish
mumkin	
 emas.	 Eng	 keng	 qo‘llanuvchi	 funksiyaga	 konstanta	 ko‘rsatkich
funksiyaning	
 nomidir.	 Funksiyaga	 o‘zgaruvchi	 ko‘rsatkich	 funksiya	 ta’rifi	 va
prototipidan	
 aloxida	 kiritiladi.	 Funksiyaga	 o‘zgaruvchi	 ko‘rsatkich	 quyidagicha
tasvirlanadi:   <funksiya tipi>	 (*	 ko‘rsatkich	 nomi)(parametrlar	 spetsifikatsiyasi).
Misol	
 uchun	 int	 (*point)	 (void).
Bu	
 ta’rifda	 qavslar	 muxim	 ahamiyatga	 ega,	 chunki	 qavslar	 yozilmasa	 bu
ta’rif	
 parametrsiz	 funksiya	 prototipi	 deb	 karaladi.	 Funksiyaga	 o‘zgaruvchi
ko‘rsatkich	
 qiymatlari	 sifatida,	 bir	 xil	 tipga	 ega	 bo‘lgan	 har	 xil	 funksiyalar
adreslarini	
 berilishi	 mumkin.
Qiymati	
 biror	 funksiya	 adresiga	 teng	 bo‘lgan	 funksiyaga	 o‘zgaruvchi
ko‘rsatkich	
 shu	 funksiyaga	 murojaat	 kilish	 uchun	 ishlatilishi	 mumkin.
Dasturda	
 funksiyaga	 kostanta	 ko‘rsatkich	 ya’ni	 nomlari	 orqali	 va
o‘zgaruvchi	
 ko‘rsatkichlar	 yordamida	 murojaat	 qilishning	 hamma	 usullari
ko‘rsatilgandir.	
 SHuni	 ta’kidlash	 lozimki	 adres	 olish	 * amali	 qo‘llanilganda
qavslar	
 ishlatish	 shartdir.

Massivlar va ko’rsatkichlar Reja: 1.       Bir o‘lchovli  massivlar. 2.       Ko‘p  o‘lchamli  massivlar. 3.       Satrlar  massiv  sifatida. 4.       Satrlar  bilan  ishlovchi  funksiyalar.  

Massiv tushunchasi.   Massiv bu  bir  tipli  nomerlangan  ma’lumotlar jamlanmasidir.  Massiv  indeksli  o‘zgaruvchi  tushunchasiga  mos  keladi.  Massiv ta’riflanganda  tipi,  nomi  va  indekslar  chegarasi  ko‘rsatiladi.  Masalan  type turidagi  length  ta  elementdan  iborat  a nomli  massiv  shunday  e’lon  qilinadi: type  a[length]; Bu  maxsus  a[0],  a[1],  ...,  a[length  -1]  nomlarga  ega  bo‘lgan  type  turidagi o‘zgaruvchilarning  e’lon  qilinishiga  to‘g‘ri  keladi. Massivning  har  bir  elementi  o‘z  raqamiga  - indeksga  ega.  Massivning  x- nchi  elementiga  murojaat  indekslash  operatsiyasi  yordamida  amalga  oshiriladi: int  x=...;                     //butun  sonli  indeks TYPE  value=a[x];           //ch-nchi  elementni  o‘qish a[x]=value;                 //x-yxb  elementga  yozish Indeks  sifatida  butun  tur  qiymatini  qaytaradigan  har  qanday  ifoda qo‘llanishi  mumkin:  char,  short,  int,  long.  C++  da  massiv  elementlarining indekslari  0 dan  boshlanadi  (1  dan  emas),  length  elementdan  iborat  bo‘lgan massivning  oxirgi  elementining  indeksi  esa  - bu  length  -1  (length  emas). Massivning  int  z[3]  shakldagi  ta’rifi,  int  tipiga  tegishli  z[0],z[1],z[2] elementlardan  iborat  massivni  aniqlaydi. Massiv  chegarasidan  tashqariga  chiqish  (ya’ni  mavjud  bo‘lmagan elementni  o‘qish/yozishga  urinish)  dastur  bajarilishida  kutilmagan  natijalarga olib  kelishi  mumkin.  SHuni  ta’kidlab  o‘tamizki,  bu  eng  ko‘p  tarqalgan xatolardan  biridir.

Agar massiv  initsializatsiya  qilinganda  elementlar  chegarasi  ko‘rsatilgan bo‘lsa  , ro‘yxatdagi  elementlar  soni  bu  chegaradan  kam  bo‘lishi  mumkin,  lekin ortiq  bo‘lishi  mumkin  emas. Misol  uchun  int  a[5]={2,-2}.  Bu  holda  a[0]  va  a[1]  qiymatlari  aniqlangan bo‘lib,  mos  holda  2 va  –2  ga  teng.  Agar  massiv  uzunligiga  qaraganda  kamroq element  berilgan  bo‘lsa,  qolgan  elementlar  0 hisoblanadi: int  a10[10]={1,  2,  3,  4};         //va  6 ta  nol Agar  nomlangan  massivning  tavsifida  uning  o‘lchamlari  ko‘rsatilmagan bo‘lsa,  kompilyator  tomonidan  massiv  chegarasi  avtomatik  aniqlanadi: int  a3[]={1,  2,  3};           Bir  o‘lchamli  massivlarni  funksiya  parametrlari  sifatida  uzatish.  Massivdan funksiya  parametri  sifatida  foylalanganda,  funksiyaning  birinchi  elementiga ko‘rsatkich  uzatiladi,  ya’ni  massiv  hamma  vaqt  adres  bo‘yicha  uzatiladi.  Bunda   massivdagi  elementlarning  miqdori  haqidagi  axborot  yo‘qotiladi,  shuning  uchun massivning  o‘lchamlari  haqidagi  ma’lumotni  alohida  parametr  sifatida  uzatish kerak. Funksiyaga  massiv  boshlanishi  uchun  ko‘rsatkich  uzatilgani  tufayli  (adres bo‘yicha  uzatish),  funksiya  tanasining  operatorlari  hisobiga  massiv  o‘zgarishi mumkin. Funksiyalarda  bir  o‘lchovli  sonli  massivlar  argument  sifatida  ishlatilganda ularning  chegarasini  ko‘rsatish  shart  emas. Funksiyalarda  bir  o‘lchovli  sonli  massivlar  argument  sifatida  ishlatilganda ularning  chegarasini  ko‘rsatish  shart  emas.

Ko‘p o‘lchovli  massivlar  ta’rifi.   Ikki  o‘lchovli  massivlar  matematikada matritsa  yoki  jadval  tushunchasiga  mos  keladi.  Jadvallarning  insializatsiya qilish  qoidasi,  ikki  o‘lchovli  massivning  elementlari  massivlardan  iborat bo‘lgan  bir  o‘lchovli  massiv  ta’rifiga  asoslangandir. Misol  uchun  ikki  qator  va  uch  ustundan  iborat  bo‘lgan  xaqiqiy  tipga tegishli  d massiv  boshlang‘ich  qiymatlari  quyidagicha  ko‘rsatilishi  mumkin: float  d[2][3]={(1,-2.5,10),(-5.3,2,14)}; Bu  yozuv  quyidagi  qiymat  berish  operatorlariga  mosdir: d[0][0]=1;d[0][1]=-2.5;d[0][2]=10; d[1][0]=-5.3;d[1][1]=2;d[1][2]=14; Bu  qiymatlarni  bitta  ro‘yxat  bilan  xosil  qilish  mumkin: float  d[2][3]={1,-2.5,10,-5.3,2,14}; Initsializatsiya  yordamida  boshlang‘ich  qiymatlar  aniqlanganda  massivning hamma  elementlariga  qiymat  berish  shart  emas.         Misol  uchun:  int  x[3][3]={(1,-2,3),(1,2),(-4)}. Bu  yozuv  quyidagi  qiymat  berish  operatorlariga  mosdir: x[0][0]=1;x[0][1]=-2;x[0][2]=3; x[1][0]=-1;x[1][1]=2;x[2][0]=-4; Initsializatsiya  yordamida  boshlang‘ich  qiymatlar  aniqlanganda  massivning birinchi  indeksi  chegarasi  ko‘rsatilishi  shart  emas,  lekin  qolgan  indekslar chegaralari  ko‘rsatilishi  shart. Misol  uchun:

double x[][2]={(1.1,1.5),(-1.6,2.5),(3,-4)} Bu  misolda  avtomatik  ravishda  katorlar  soni  uchga  teng  deb  olinadi. Funksiyaga  ko‘p  o‘lchamli  massivlarni  uzatish.  Ko‘p  o‘lchamli massivlarni  funksiyaga  uzatishda  barcha  o‘lchamlar  parametrlar  sifatida uzatilishi  kerak.  C++  da  ko‘p  o‘lchamli  massivlar  aniqlanishi  bo‘yicha  mavjud emas.  Agar  biz  bir  nechta  indeksga  ega  bo‘lgan  massivni  tavsiflasak  (masalan, int  mas  [3][4]),  bu  degani,  biz  bir  o‘lchamli  mas  massivini  tavsifladik,  bir o‘lchamli  int  [4]  massivlar  esa  uning  elementlaridir Misol:   Kvadrat  matritsani  uzatish  (transportirovka  qilish) Agar  void  transp(int  a[][],int  n){.....}  funksiyasining  sarlavhasini  aniqlasak, bu  holda  biz  funksiyaga  noma’lum  o‘lchamdagi  massivni  uzatishni  xohlagan bo‘lib  qolamiz.  Aniqlanishiga  ko‘ra  massiv  bir  o‘lchamli  bo‘lishi  kerak,  hamda uning  elementlari  bir  xil  uzo‘nlikda  bo‘lishi  kerak.  Massivni  uzatishda  uning elementlarining  o‘lchamlari  haqida  ham  biron  narsa  deyilmagan,  shuning  uchun kompilyator  xato  chiqarib  beradi. Bu  muammoning  eng  sodda  echimi  funksiyani  quyidagicha  aniqlashdir: void  transp(int  a[][4],int  n){.....},  bu  holda  har  bir  satr  o‘lchami  4 bo‘ladi, massiv  ko‘rsatkichlarining  o‘lchami  esa  hisoblab  chiqariladi. Satrlar.  C++  da  belgili  ma’lumotlar  uchun  char  turi  qabul  qilingan.  Belgili axborotni  taqdim  etishda  belgilar,  simvolli  o‘zgaruvchilar  va  matniy konstantalar  qabul  qilingan. Misollar: const  char  c= ' c ' ;//belgi  - bir  baytni  egallaydi,  uning  qiymati  o‘zgarmaydi