logo

C++ da ko‘rsatkichlar asosida massiv yaratish

Yuklangan vaqt:

19.11.2024

Ko'chirishlar soni:

0

Hajmi:

50.494140625 KB
MAVZU:  C++ da ko‘rsatkichlar asosida massiv yaratish
va ularni masalalar yechishga qo‘llash
I. Kirish
          II.       Asosiy qism
1. C++ da Ko‘rsatkichlar haqida ma’lumot
2. Massiv tushunchasi
3. C++ da ko‘rsatkichlar asosida massiv yaratish va 
 ularni misollarda qo‘llsh
III.   Xulosa
IV. Foydalanilgan adabiyotlar
                                      Kirish            C++ dasturlash tilida ko‘rsatkichlar (pointers) va dinamik xotira boshqaruvi
muhim   tushunchalar   hisoblanadi.   Ko‘rsatkichlar   yordamida   xotira   manzillarini
boshqarish   va   dinamik   massivlar   yaratish   mumkin.   Bu   esa   dasturlarga   ko‘proq
moslashuvchanlik   va   samaradorlikni   ta’minlaydi.   Ushbu   kurs   ishida   biz
ko‘rsatkichlardan   foydalangan   holda   massivlar   yaratish   va   ularni   masalalar
yechishga qo‘llashni ko‘rib chiqamiz.
            Dasturlashda massivlar ma’lumotlarni tartiblangan holda saqlash va ularga
tezkor   murojaat   qilish   uchun   keng   qo‘llaniladi.   Statik   massivlar   oldindan
belgilangan   o‘lchamga   ega   bo‘lsa,   dinamik   massivlar   kerakli   o‘lchamga   ko‘ra
xotirada joy ajratadi va shu bilan resurslardan tejamkor foydalanishni ta’minlaydi.
Dinamik massivlar  dastur  ishlashi   davomida o‘lchamini  o‘zgartirishi  mumkin, bu
esa katta hajmdagi ma’lumotlarni qayta ishlashda juda qulaydir.
                         Ko‘rsatkichlar yordamida dinamik massiv yaratish va ulardan samarali
foydalanish   ko‘plab   masalalarni   yechishda   katta   ahamiyatga   ega.   Misol   uchun,
foydalanuvchidan   o‘lchami   kiritiladigan  massivlar   yaratish,   ularni  teskari   tartibda
chiqarish,   eng   katta   va   eng   kichik   elementlarni   topish   kabi   vazifalarni   bajarish
mumkin.   Bu   kabi   masalalarni   yechish   orqali   nafaqat   dasturlash   tilining
imkoniyatlarini   chuqurroq   o‘rganish,   balki   dasturiy   ta’minot   yaratish   jarayonida
samarali kod yozishni o‘rganish mumkin.
   Ushbu kurs ishining asosiy  maqsadi  talabalarni ko‘rsatkichlar va dinamik
massivlar bilan ishlash bo‘yicha bilim va ko‘nikmalarini rivojlantirishdir. Kurs ishi
davomida talabalar quyidagi vazifalarni bajarishlari kerak bo‘ladi
2 ASOSIY QISM
                   2.1 C++ da Ko‘rsatkichlar haqida ma’lumot
1.1 Ko rsatkich tushunchasi va uni to‘g’ri qo‘llashʻ
C++   tilining   eng   katta   afzalliklaridan   biri   shundaki,   u   mashina   darajasidan
abstraktlash   paytida   yuqori   darajadagi   dasturlarni   yozish,   shu   bilan   birga   kerak
bo‘lganda   apparatga   yaqin   ishlash   imkoniyatini   ham   beradi.   C++   ilova   ishlashini
bayt   va   bit   darajasida   sozlash   imkonini   beradi.   Ko‘rsatkichlarning   qanday
ishlashini   tushunish   tizim   resurslaridan   samarali   foydalanadigan   dasturlarni
yozishni o rganish bosqichlaridan biridir.	
ʻ
                     Ko‘rsatkichlar . Ko‘rsatkich  bu maydon  manzilini  xotirada saqlaydigan
o zgaruvchidir.   int   o zgaruvchisi   butun   qiymatni   saqlash   uchun   ishlatilgandek,	
ʻ ʻ
ko rsatkich o zgaruvchisi xotira maydoni manzilini saqlash uchun ishlatiladi.
ʻ ʻ
            
0x101
manzilidagi
ko‘rsatkich
0x558   qiymatini
o‘z  ichiga oladi      Xotiradagi
ma’lumotlar   0x558
manzilida
                    1-rasm 0x558 manziliga ko‘rsatkich
 Shunday qilib,  ko‘rsatkich  o zgaruvchidir va barcha 	
ʻ o zgaruvchilar 	ʻ
singari u ham xotiradan joy egallaydi (1-rasmda 0x558 manzilda). Ko‘rsatkichlarni
maxsus ko rinishga keltiradigan xususiyat shundaki, ular tarkibidagi qiymatlar (bu 	
ʻ
holda, 0x558) xotira maydonlarining manzillari sifatida talqin etiladi. Demak, 
ko rsatkich bu xotiradagi maydonni ko rsatadigan maxsus o zgaruvchidir.	
ʻ ʻ ʻ
  Xotira manzillari odatda o‘n oltilik sanoq sistemasida ko‘rsatiladi, ya’ni 16
xil   belgilar   yordamida   0-9,   so‘ngra   A-F.   An'anaga   ko ra   Ox   prefiksi   o‘n   oltilik	
ʻ
sanoq   sistemasidan   oldin   yoziladi.   Shunday   qilib,   OxA   o‘n   oltilik   oltilik   sanoq
3 sistemasidagi raqam o‘nlik sanoq sistemasida 10ni ifodalaydi; 0xF - 15; va 0x10 –
16 ni ifodalaydi.
                       Ko‘rsatkichni e'lon qilish . Ko‘rsatkich o zgaruvchi bo lgani uchun uniʻ ʻ
boshqa   har   qanday   o zgaruvchi   singari   e'lon   qilish   kerak.   Odatda,   ko rsatkich	
ʻ ʻ
ma’lum   bir   turdagi   qiymatga   ishora   qiladi   (masalan,   int   tipiga).   Bu   shuni
anglatadiki,   ko‘rsatkichda   joylashgan   manzil   butun   sonni   o‘z   ichiga   olgan
xotiradagi   maydonga   ishora   qiladi.   Shuningdek,   xotiraning   tipga   ega   bo lmagan	
ʻ
blokiga   ko‘rsatkichni   belgilashingiz   mumkin   (void   ga   ko‘rsatkich   deb   ham
ataladi).
Ko‘rsatkich boshqa barcha o‘zgaruvchilar singari e'lon qilinishi kerak:
     tip_nomi * Ko‘rsatkich_nomi
Ko‘pgina o zgaruvchilar bilan bo lgani kabi, agar ko‘rsatkichni 	
ʻ ʻ
initsializatsiya qilmasangiz, unda tasodifiy qiymat bo ladi. Tasodifiy xotira 	
ʻ
maydoniga kirmaslik uchun ko rsatkich 	
ʻ nullptr¹  qiymati bilan boshlanadi. 
Ko‘rsatkich qiymati har doim  nullptr  qiymatiga tengligini tekshirishi mumkin, bu 
haqiqiy xotira maydonining manzili bo lishi mumkin emas:	
ʻ
     tip_nomi * Ko‘rsatkich_nomi = nullptr;
Shunday qilib, butun sonli ko rsatkichni e'lon qilish quyidagicha bo‘ladi:	
ʻ
     int *pInteger = nullptr;
Ko‘rsatkich, shu paytgacha o rganilgan har qanday boshqa ma’lumotlar 	
ʻ
turining o zgaruvchisi kabi, initsializatsiyadan oldin tasodifiy qiymatni o‘z ichiga 	
ʻ
oladi. Ko‘rsatkich uchun bu tasodifiy qiymat ayniqsa xavflidir, chunki u xotira 
maydonining ba’zi manzillarini anglatadi. Initsializatsiya qilinmagan 
ko‘rsatkichlar
4 dasturingizning yaroqsiz xotira maydoniga kirishiga olib kelishi va u dasturni 
ishdan chiqarishi mumkin.
1
Ushbu qiymat - bo‘sh ko‘rsatkich C ++ da C++11 standartida paydo bo‘ldi.
Ilgari, C ga mos keladigan null qiymat ishlatilgan (bu hali ham ishlatilishi mumkin,
garchi nullptr faqatgna yangi dasturlar uchun tavsiya etilsa ham).
                   2.2. Adres oluvchi o zgaruvchilarʻ
&   adres   olish   amali.   O zgaruvchilar   -   bu   til   tomonidan   xotirada	
ʻ
ma’lumotlar bilan ishlashni ta’minlaydigan imkoniyat.
Agar   varName   o zgaruvchi  bo‘lsa,  &varName  uning qiymati  saqlanadigan	
ʻ
xotira adres o‘rnini qaytaradi. Shunday qilib, agar sintaksisdan foydalangan holda
butun o zgaruvchini e'lon qilgan bo lsangiz, sizga tanish bo lgan	
ʻ ʻ ʻ
            
                       int age = 30;
u   holda   &age   ifodasi   belgilangan   qiymat   30   joylashtirilgan   xotira   maydonining
manzilini qaytaradi.
Yuqorida   saqlangan   qiymatga   kirish   uchun   foydalaniladigan   butun   sonli
o‘zgaruvchi xotira manzilini olish ko‘rsatilgan tushunchasi ko‘rsatilgan.
Misol.  O zgaruvchi manzilini olish	
ʻ
#include <iostream>
         using namespace std;
int main() 
{
int age = 15;
const double Pi =3.1416;
cout <<"age manzili: "<<&age<<endl;
cout <<"Pi manzili: "<<&Pi<<endl;
return 0;
5 }
Natija:  
age manzili: 0x7ffc2160a0ec
Pi manzili: 0x7ffc2160a0e0
Adreslarni saqlash uchun ko‘rsatkichlardan foydalanish.     
Ko‘rsatkichlarni qanday e'lon qilishni va o zgaruvchining manzilini aniqlashni, ʻ
shuningdek, ko rsatkichlar xotira maydoni manzilini saqlash uchun ishlatiladigan 	
ʻ
o zgaruvchini bilasiz. 	
ʻ
         Ushbu ma’lumotni birlashtirish va & adres olish operatori yordamida olingan 
adreslarni saqlash uchun ko‘rsatkichlardan foydalanish vaqti keldi.
Allaqachon ma’lum bir turdagi o zgaruvchini e'lon qilish sintaksisini yaxshi 	
ʻ
bilasiz:
tip O‘zgaruvchi_nomi = Boshlang'ich qiymat;
Ushbu o‘zgaruvchining adresini ko rsatkichda saqlash uchun siz belgilangan	
ʻ
tip orqali ko rsatkichni e'lon qilishingiz va uni adresni olish operatori yordamida 	
ʻ
initsializatsiyalashingiz kerak:
tip* Ko‘rsatkich = &O‘zgaruvchi_nomi;
int tipidagi  age  o zgaruvchisini shunday e'lon qildingiz deylik:	
ʻ
int age = 30;
Keyinchalik foydalanish uchun age o zgaruvchisi qiymatining manzilini 	
ʻ
saqlaydigan int ko rsatkichi quyidagicha e'lon qilinadi:	
ʻ
6 int *pointsToInt = &age; //age butun sonli o‘zgaruvchisiga ko rsatkichʻ
Misol. Quyidagi  misolda & operatori  bilan olingan manzilni saqlash  uchun
ko‘rsatkichdan foydalanishni keltirilgan.
#include <iostream>
using namespace std;
int main()
{
int age = 15;
int* pointsToInt = &age;
//Ko‘rsatkich qiymatini chiqarish
cout<<"age manzili: "<<pointsToInt<<endl;
return 0;
}
Natija:
age manzili: 0x7ffe5d098af4
                  Endi   adres   ko rsatkich   o zgaruvchisida   qanday   saqlashni   bilganingizdan	
ʻ ʻ
so‘ng,   quyidagi   misolda   ko‘rsatilgandek,   xuddi   shu   ko‘rsatkichga   boshqa   xotira
adresi berilishi va keyin boshqa qiymatga ishora qilishi mumkin deb taxmin qilish
mantiqan to‘g'ri keladi.
      #include <iostream> 
      using namespace std;
     int main()
     {
    int age = 15;
    int* pointsToInt = &age;
    cout<<"pointsToInt age ga ko rsatkich"<<endl;	
ʻ
    cout<<"pointstoInt = "<<pointsToInt<<endl;
7     int dogsAge = 6;
     pointsToInt = &dogsAge;
     cout<<"pointstoInt dogsAge ga ko‘rsatkich"<<endl;
     cout<<"pointstoInt = "<<pointstoInt<<endl;
     return 0;
     }
Natija:
pointstoInt age ga ko rsatkichʻ
pointstoInt = 0x7ffce0054864
pointsToInt dogsAge ga ko‘rsatkich
pointstoInt = 0x7ffce0054860
              Ajratish   operatori   *   yordamida   ma’lumotlarga   kirish.   Sizda   to liq	
ʻ
manzilni o‘z ichiga olgan ko‘rsatkich bor deylik. Qanday qilib biz o‘z ichiga olgan
mA’lumotlarni   yozish   yoki   o‘qish   uchun   ushbu   maydonga   kirishimiz   mumkin?
Buning uchun ajratish operatori * ishlatiladi. 
                    Aslida,   agar   pData   ko rsatkichi   mavjud   bo‘lsa,   *pData   ifodasi   ushbu	
ʻ
ko‘rsatkichda joylashgan manzilda saqlangan qiymatga kirishga imkon beradi.
           * operatoridan foydalanish quyidagi dasturda ko rsatilgan.	
ʻ
#include <iostream>
using namespace std;
int main()
{
       int age = 15;
       int dogsAge = 5;
       cout << "age =" << age << endl;
       cout << "dogsAge = " << dogsAge << endl;
       int *pointsToInt = &age;
        cout   <<   "pointsToInt   age   ga   ko‘rsatkich"   <<   endl;   //   Ko‘rsatkich
qiymatini chiqarish
8        cout << "pointstoInt = " << pointsToInt << endl;    // Ko‘rsatilgan sohadan
qiymatni chiqarish
       cout << "*pointsToInt=" << *pointsToInt << endl;
       pointsToInt = &dogsAge;
       cout << "pointsToInt dogsAge ga ko‘rsatkich" << endl;
       cout << "*pointstoInt = " << *pointsToInt << endl;
       return 0;
}
 Natija:
age =15
dogsAge = 5
pointsToInt age ga ko‘rsatkich
pointstoInt = 0x7ffe4b39bb44
*pointsToInt=15
pointsToInt dogsAge ga ko‘rsatkich
*pointstoInt = 5 
           Yuqoridagi misoldagi ko rsatkich u ko rsatgan xotira maydonidan qiymatniʻ ʻ
o‘qish   uchun   ishlatilgan.   Quyidagi   dastur   esa   *pointsToInt   operatoridan   birinchi
qiymat   sifatida   foydalanilganda   nima   sodir   bo lishini   ko rsatadi   -   ya’ni   qiymatni	
ʻ ʻ
o‘qish uchun emas, balki belgilash uchun.
#include <iostream>
using namespace std;
int main()
{
       int dogsAge = 15;
       cout << "Boshlang'ich qiymati dogsAge = " << dogsAge << endl;
       int *pAge = &dogsAge;
       cout << "pAge DogsAgega ko rsatkich" << endl;	
ʻ
       cout << "dosAgening qiymatini kiriting: ";
9        // pAgening manzili bo yicha xotira sohasiga qiymatni saqlashʻ
       cin >> *pAge;
// Manzilni kiritish
saqlanadi:
       cout << "Qiymat " << hex << pAge << endl;
       // quyidagi manzilda
       cout << "Endi dogsAge = " << dec << dogsAge << endl;
       return 0;
}
Natija:
Boshlang'ich qiymati dogsAge = 15
pAge DogsAgega ko rsatkich	
ʻ
dosAgening qiymatini kiriting: 6
Qiymat 0x7ffd38065684
Endi dogsAge = 6
             Ko‘rsatkich uchun sizeof()  qiymati . Yuqoridagi  fikrlardan bilganimizdek,
ko rsatkich   faqat   xotira   maydoni   manzilini   o‘z   ichiga   olgan   o zgaruvchidir.	
ʻ ʻ
Shuning   uchun,   qaysi   turiga   ishora   qilmasin,   ko‘rsatkichning   tarkibi   manzilning
raqamli   qiymatidir.   Manzilning   uzunligi   uni   saqlash   uchun   zarur   bo‘lgan   baytlar
soni;   u   ma’lum   bir   tizim   uchun   doimiydir.   Shunday   qilib,   sizeof()   ko‘rsatkichi
bo yicha   bajarilish   natijasi   dastur   tuzilgan   kompilyatorga   va   operatsion   tizimga
ʻ
bog'liq bo lib, quyidagi dasturda ko‘rsatilgandek u ko rsatadigan ma’lumotlarning	
ʻ ʻ
tabiatiga bog'liq emas.
#include <iostream>
using namespace std;
int main()
{
       cout << "tiplar uchun sizeof:" << endl;
       cout << "sizeof(char) = " << sizeof(char) << endl;
10        cout << "sizeof(int) = " << sizeof(int) << endl;
       cout << "sizeof(double) = " << sizeof(double) << endl;
       cout << "Ko‘rsatkichli tiplar uchun sizeof:" << endl;
       cout << "sizeof(char*) = " << sizeof(char *) << endl;
       cout << "sizeof(int*) = " << sizeof(int *) << endl;
       cout << "sizeof(double*) = " << sizeof(double *) << endl;
       return 0;
}
Natija:
tiplar uchun sizeof:
sizeof(char) = 1
sizeof(int) = 4
sizeof(double) = 8
Ko‘rsatkichli tiplar uchun sizeof:
sizeof(char*) = 8
sizeof(int*) = 8
sizeof(double*) = 8
                 2.3. Ko rsatkichlarda const kalit so zidan foydalanishʻ ʻ
        Oldingi mavzularda o zgaruvchini const deb e'lon qilish, ishga tushirilgandan	
ʻ
so‘ng   o zgaruvchining   qiymati   o zgarmas   turishini   bilib   olgandik.   Bunday	
ʻ ʻ
o zgaruvchining qiymatini o zgartirish mumkin emas.	
ʻ ʻ
Ko‘rsatkichlar   ham   o‘zgaruvchidir,   shuning   uchun   const   kalit   so zi   ham   ularga	
ʻ
mos   keladi.   Biroq,   ko‘rsatkichlar   -   bu   xotira   maydonlarining   manzillarini   o‘z
ichiga   olgan   va   xotiradagi   ma’lumotlarni   o zgartirishga   imkon   beradigan	
ʻ
o zgaruvchilarning maxsus turi. Shunday qilib, ko rsatkichlar va doimiylar haqida	
ʻ ʻ
gap ketganda, quyidagi kombinatsiyalar bo lishi mumkin.	
ʻ
11           1)   Ko‘rsatkichda   joylashgan   manzil   doimiy   bo lib,   uni   o zgartirish   mumkinʻ ʻ
emas, ammo u ko rsatgan ma’lumotlar o zgarishi mumkin:	
ʻ ʻ
 
int daysM = 30;
int* const pdaysM = &daysM;
*pdaysM = 31;
int daysMK = 30;
pdaysM = &daysMK //Xatolik: adresni o zgartirish mumkin emas	
ʻ
2) Ko‘rsatkich ko‘rsatgan ma’lumotlar doimiy va ularni o‘zgartirish mumkin emas,
lekin   ko‘rsatkichda   joylashgan   manzilning   o zi   o zgarishi   mumkin   (ya’ni	
ʻ ʻ
ko rsatkich boshqa joyga ishora qilishi mumkin):	
ʻ
int hoursInDay = 24;
const int* pointsToInt= &hoursInDay;
int monthsInYear = 12;
pointsToInt = &monthsInYear; //OK!
*pointsToInt = 13; //Kompilyatsiya vaqtida xatolik
//Ma’lumotni o zgartirish mumkin emas	
ʻ
int* newPointer = pointsToInt; //Kompilyatsiya vaqtida xatolik:
//doimiy ko‘rsatkichga
//doimiy ko‘rsatkichni belgilay olmaysiz
  3)   Ko‘rsatkichda   joylashgan   manzil   ham,   u   ko rsatadigan   qiymat   ham   doimiy	
ʻ
bo lib, ularni o zgartirish mumkin emas (eng cheklovchi variant):	
ʻ ʻ
int hoursInDay = 24;
const int* const pHoursInDay= &hoursInDay;
*pHoursInDay = 25; //Kompilyatsiya xatoligi:
//ushbu ko‘rsatkich tomonidan ko‘rsatilgan
//qiymatni o zgartirish mumkin emas	
ʻ
12 int daysInMonth = 30;
pHoursInDay = &daysInMonth;
      
              Ushbu   turli   xil   konstruksiyalar,   ayniqsa   funksiyalarga   ko‘rsatkichlarni
uzatishda   foydalidir.   Funksiya   parametrlari   funksiyani   ko‘rsatkich   tomonidan
ko‘rsatilgan   qiymatni   o zgartira   olmasligini   ta’minlash   uchun   agar   funksiyadaʻ
bunday   o zgartirish   nazarda   tutilmagan   bo‘lsa,   eng   cheklangan   darajadagi	
ʻ
barqarorlikni   ta’minlash   uchun   e'lon   qilinishi   kerak.   Bu   dasturchining
ko rsatkichning   qiymatini   yoki   u   ko rsatgan   ma’lumotni   noto‘g'ri   o zgartirishiga	
ʻ ʻ ʻ
yo‘l qo‘ymaydi.
                                         2. Massiv tushunchasi
Massivlar.   Bu   qismda   dasturdagi   ma’lumot   strukturalari   bilan   tanishishni
boshlaymiz.Dasturda   ikki   asosiy   tur   ma’lumot   strukturalari   mavjuddir.   Birinchisi
statik, ikkinchisi dinamikdir.  
 
           Statik   deganimizda   hotirada   egallagan   joyi   o‘zgarmas,   dastur   boshida
beriladigan   strukturalarni   nazarda   tutamiz.   Dinamik   ma’lumot   tiplari   dastur
davomida o‘z hajmini, egallagan hotirasini o‘zgartirishi mumkin.
                Agar   struktura   bir   hil   kattalikdagi   tiplardan   tuzilgan   bo‘lsa,   uning   nomi
massiv (array)     deyiladi. Massivlar dasturlashda eng ko‘p qo‘laniladigan ma’lumot
tiplaridir.   Bundan   tashqari   strukturalar   bir   necha   farqli   tipdagi   o‘zgaruvchilardan
tashkil topgan bo‘lishi mumkin. Buni biz klas (Pascalda record) deymiz. Masalan
bunday strukturamiz ichida odam ismi va yoshi bo‘lishi mumkin.   
                 Bu bo‘limda biz massivlar bilan yaqindan tanishib o‘tamiz. Bu bo‘limdagi
massivlarimiz C uslubidagi, pointerlarga (ko‘rsatkichlarga) asoslan strukturalardir.
Massivlarning boshqa ko‘rinishlarini keyingi qismlarda o‘tamiz.
                  Massivlar   hotirada   ketma-ket   joylashgan,   bir   tipdagi   o‘zgaruvchilar
guruhidir.   Alohida   bir   o‘zgaruvchini   ko‘rsatish   uchun   massiv   nomi   va   kerakli
13 o‘zgaruvchi   indeksini   yozamiz.   C/C++   dagi   massivlardagi   elementlar   indeksi   har
doim noldan boshlanadi. Bizda char tipidagi m nomli massiv bor bo‘lsin, va uning
4 dona elementi mavjud bo‘lsin. Shemada bunday ko‘rsataylik:
              m[0] ->       4
            m[1] -> -44
            m[2] -> 109
            m[3] ->     23
              Ko‘rib   turganimizdek,   elementga   murojaat   qilish   uchun   massiv   nomi   va   []
qavslar   ichida   element   indeksi   yoziladi.   Bu   yerda   birinchi   element   qiymati   4,
ikkinchi   element   -1   nomerli   indeksda   -44   qiymatlari   bor   ekan.   Ohirgi   element
indeksi n-1 bo‘ladi (n - massiv elementlari soni).
[] qavslar ichidagi indeks butun son yoki butun songa olib keluvchi ifoda bo‘lmog'i
lozim. Masalan:
           ...
         int k = 4, l = 2;
         m[ k-l ] = 77; // m[2] = 77  
         m[3] *= 2; // m[3] = 46
         double d = m[0] * 6; // d = 24
         cout << m[1]; // Ekranda: -44  
         ...
                  Massivlarni   ishlatish   uchun   ularni   e'lon   qilish   va   kerak   bo‘lsa   massiv
elementlarini   initsalizatsiya   qilish   kerak.   Massiv   e'lon   qilinganda   kompilyator
elementlar soniga teng hajmda hotira ajratadi. Masalan yuqorida qo‘llanilgan char
tipidagi m massivini e'lon qilaylik.
                                        char m[4];
                    Bu   yerdagi   4   soni   massivdagi   elementlar   miqdorini   bildiradi.   Bir   necha
massivni e'londa bersak ham bo‘ladi:
14                            int m1[4], m2[99], k, l = 0;
           Massiv elementlari dastur davomida initsalizatsiya qilishimiz mumkin, yoki
boshlang'ich   qiymatlarni   e'lon   vaqtida,   {}   qavslar   ichida   ham   bersak   bo‘ladi.   {}
qavslardagagi qiymatlar massiv initsalizaytsiya ro‘yhati deyiladi.
                      int n[5] = {3, 5, -33, 5, 90};
               Yuqorida birinchi elementning qiymati 3, ikkinchiniki 5 ... ohirgi beshinchi
element qiymati esa 90 bo‘ldi. Boshqa misol:
                     double array[10] = {0.0, 0.4, 3.55};
                      Bu   yerdagi   massiv   tipi   double   bo‘ldi.   Ushbu   massiv   10   ta   elementdan
iboratdir. {} qavslar ichida esa faqat boshlangich uchta element qiymatlari berildi.
Bunday holda, qolgan elementlar avtomatik tarzda nolga tenglashtiriladi. Bu yerda
aytib   o‘tishimiz   kerakki,   {}   qavslar   ichida   berilgan   boshlangish   qiymatlar   soni
massivdagi   elementlar   sonidan   katta   bo‘lsa,   sintaksis   hatosi   vujudga   keladi.
Masalan:
                             char k[3] = {3, 4, 6, -66, 34, 90}; // Xato!  
              Uch   elementdan   iborat   massivga   6   dona   boshlangich   qiymat   berilyapti,   bu
hatodir. Boshqa misolni ko‘rib chiqaylik:  
                             int w[] = {3, 7, 90, 78};
  w   nomli   massiv   e'lon   qilindi,   lekin   []   qavslar   ichida   massivdagi   elementlar   soni
berilmadi.   Bunday   holda   necha   elementga   joy   ajratishni   kompilyator   {}   qavslar
ichidagi boshlangich qiymatlar miqdoriga qarab biladi. Demak, yuqoridagi misolda
w massivimiz 4 dona elementdan iborat bo‘ladi.   
                      E'lon   davridagi   massiv   initsalizatsiya   ro‘yhati   dastur   ijrosi   vaqtidagi
initsalizatsiyadan ko‘ra tezroq ishlaydigan mashina kodini vujudga keltiradi.  
// Massivlar bilan ishlash.
#include <iostream>
#include <iomanip>
using namespace std;
const int massiv = 8; // massiv kattaligi uchun konstanta
int k[massiv];
15 int c[massiv] = {5, 7, 8, 9, 3, 44, -33, 0}; // massiv initsalizatsiya ro‘yhati
int main() {
    // dastur ichida initsializatsiya
    for (int i = 0; i < massiv; i++) {
        k[i] = i + 1;
    }
    // natijalarni chiqarish
    for (int j = 0; j < massiv; j++) {
        cout << k[j] << setw(4) << c[j] << endl;
    }
    return 0;
}
Ekranda:
  1       5
 2       7
 3       8
 4       9
 5       3
 6     44
 7 -33
 8       0
                 Yuqorida   <iomanip>   faylini dasturimizga kiritdik. Bu e'lon faylida standart
kirish/chiqish   oqimlari   bilan   ishlaydigan   buyruqlar   berilgan.   Dasturimizda
qo‘llanilgan   setw()   manipulyatori   chiqish   oqimiga   berilayatgan   ma’lumotlarning
eng   kichik   kengligini   belgilaydi,   biz   setw()   parametrini   4   deb   berdik,   demak   c[]
massivi   elementlari   4   harf   kenglikda   ekranga   bosiladilar.   Agar   kenglik   kamlik
qilsa,   u   kattalashtiriladi,   agar   bo‘sh   joy   qolsa,   elementlar   chapga   yondashilib
yoziladi. Biz <iomanip> va manipulyatorlarni keyinroq to‘la ko‘rib chiqamiz.
              Misolimizda   massiv   nomli   konstantani   qo‘lladik.   Uning   yordamida   massiv
chegaralarini   va   for   strukturasidagi   chegaraviy   qiymatlarni   berdik.   Bunday
16 o‘zgarmasni qo‘llash dasturda hatoga yo‘l qo‘yishni kamaytiradi. Massiv chegarasi
o‘zgarganda, dasturning faqat bir joyiga o‘zgarish kiritiladi. Massiv hajmi e'lonida
faqat const sifatli o‘zgaruvchilar qo‘llanilishi mumkin.
          Massivlar bilan ishlaganda eng ko‘p yo‘l qoyiladigan hato bu massivga 0 dan
kichkina va (n-1) dan (n: massivdagi elementlar soni) katta indeks bilan murojaat
qilishdir. Bunday hato dastur mantig'i hatosiga olib keladi. Kompilyator bu turdagi
hatolarni tekshirmaydi. Keyinroq o‘zimiza yozgan massiv klaslarida ushbu hatoni
tekshiriladigan   qilishimiz   mumkin.   10   ta   sonning   tushish   ehtimilini   ko‘rsaturvchi
dastur yozaylik.
// Ehtimollar va massivlar
  #include <iostream>
#include <iomanip>
#include <ctime>
#include <cstdlib>
using namespace std;
int main() {
    const int massivHajmi = 10;
    int m[massivHajmi] = {0}; // hamma 10 ta element 0 ga tenglashtirildi 
    srand(time(NULL));
for(int i = 0; i < 1000; i++) {
     ++m[rand() % 10];
 }
         for(int j = 0; j < massivHajmi; j++) {
 cout << j << setw(4) << m[j] << endl;
}
17  return 0;
}
Ekranda:
0   87
1   96
2  104
3  113
4   86
5   91
6   98
7  109
8  109
9  107
          Ko‘rib turganimizdek, sonlarning tushish ehtimoli nisbatan tengdir. Albatta,
bu qiymatlar dasturning har yangi ishlashida o‘zgaradi.
                      4. C++ da ko‘rsatkichlar asosida massiv yaratish va 
         ularni misollarda qo‘llsh
                Ko‘rsatkich   asosida   massiv   yaratish.   Massivlar   nomi   dasturda   konstanta
ko‘rsatkichdir.   SHuning   uchun   ham   int   z[4]   massiv   elementiga   *(z+4)   shaklda
murojaat   kilish   mumkin.   Massivlar   bilan   ishlanganda   kavslarsiz   ishlash   mumkin.
Massivlarni   funksiyalar   parametrlari   sifatida.   Massivlar   funksiyaga   turidagi   bir
o‘lchamli   massivlar   sifatida   yoki   ko‘rsatkichlar   sifatida   uzatilishi   mumkin.
Masalan satrlar funksiyaga char turidagi bir o‘lchamli massivlar sifatida yoki char*
turidagi   ko‘rsatkichlar   sifatida   uzatilishi   mumkin.   Oddiy   massivlardan   farqli
o‘laroq,   funksiyada   satr   uzunligi   ko‘rsatilmaydi,   chunki   satr   oxirida   satr   oxiri   \0
belgisi bor. Misol: Berilgan belgini satrda qidirish funksiyasi 
int find(char *s,char c)
{
18  for (int i=0; {
for (int i=0;i<strlen(s);i++)
if(s[i]==c) return i;
return –1
}
Massiv funksiya qiymati sifatida. Massiv qiymat qaytaruvchi funksiya ta’rifi:
float *sum_vec(int n,float a,float b)
{
float d[n];
for(int i=0;i<n;i++,d[i]=a[i]+b[i]);
return d;
}
Bu funksiyaga quyidagicha murojaat kilish mumkin:
float a[]={1,-1.5,-2},b[]={-5.2,1.3,-4};
float c[]=sum_vec(3,a,b);
      Ko‘p o‘lchamli massivlar va ko‘rsatkichlar. C++ da massivning eng
umumiy tushunchasi - bu ko‘rsatkichdir, bunda har xil turdagi ko‘rstakich bo‘lishi
mumkin, ya’ni massiv har qanday turdagi elementlarga, shu jumladan, massiv
bo‘lishi mumkin bo‘lgan ko‘rsatkichlarga ham ega bo‘lishi mumkin. O‘z tarkibida
boshqa massivlarga ham ega bo‘lgan massiv ko‘p o‘lchamli hisoblanadi.
       Bunday massivlarni e’lon qilishda kompyuter xotirasida bir nechta turli
xildagi ob’ekt yaratiladi.
        Ko‘rsatkichlar massivlari. Ko‘rsatkichlar massivlari quyidagicha
ta’riflanadi.
                              <tip> *<nom>[<son>]
Misol uchun int *pt[6] tA’rif int tipidagi ob’ektlarga olti elementli massivni
kiritadi.
         Ko‘rsatkichlar massivlari satrlar masssivlarini tasvirlash uchun qulaydir.
19 Misol uchun familiyalar ro‘yxatini kiritish uchun ikki o‘lchovli massivdan
foydalani kerak.
         char fam[][20]={ "Turapov","Asilbek","Ibadulla o‘g‘li"}
 Xotirada 60 elementdan iborat bo‘ladi, chunki har bir familiya 20 gacha 0 lar
bilan to‘ldiriladi.
        Ko‘rsatkichlar massivi yordamida bu massivni quyidagicha tA’riflash
mumkin.
          char *pf[]= { "Turapov","Asilbek","Ibadulla o‘g‘li"}.
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.
Misol: Butun sonlardan iborat massivni kiriting va ularning yig‘indisini chiqaring?
#include <iostream>
using namespace std;
20    int main() {
    int n;  // Massiv o‘lchamini saqlash uchun o‘zgaruvchi
    cout << "Massiv o‘lchamini kiriting: ";
    cin >> n;
    // Ko‘rsatkich orqali massiv yaratish
    int* arr = new int[n];
    // Massiv elementlarini kiritish
    cout << "Massiv elementlarini kiriting:\n";
    for (int i = 0; i < n; i++) {
        cout << "Element " << i + 1 << " ";
        cin >> *(arr + i);
    }
    // Massiv elementlarining yig'indisini hisoblash
    int sum = 0;
    for (int i = 0; i < n; i++) {
        sum += *(arr + i);
    }
    // Natijani chiqarish
    cout << "Massiv elementlarining yig'indisi: " << sum << endl;
    // Dinamik tarzda ajratilgan xotirani tozalash
    delete[] arr;
    return 0;
    }
Natija:
Massiv o‘lchamini kiriting: 3
Massiv elementlarini kiriting:
21 Element 1: 4
Element 2: 5
Element 3: 6
Massiv elementlarining yig'indisi: 15
 
Bu masalani yechishda
                Ko‘rsatkichlar   orqali   massivga   murojaat   qilish:   *(arr   +   i)   orqali
massivning   i-chi   elementiga   murojaat   qilinadi.   Bu   usul   ko‘rsatkichlar   yordamida
massiv elementlarini boshqarishni ko‘rsatadi.       
                Dinamik   xotirani   tozalash:   delete[]   arr;   qatori   orqali   dinamik   tarzda
ajratilgan xotira bo‘shatiladi.
                   
22                                                     Xulosa
Ushbu   kurs   ishi   davomida   C++   dasturlash   tilida   ko‘rsatkichlar   va   dinamik
massivlar   bilan   ishlash   bo‘yicha   muhim   bilim   va   ko‘nikmalar   o‘rganildi.
Ko‘rsatkichlar   yordamida   dinamik   massivlar   yaratish,   ularni   boshqarish   va   turli
masalalarni   yechish   orqali   dasturiy   ta’minot   yaratishda   xotira   resurslaridan
samarali foydalanish imkoniyati kengayadi.
Asosiy natijalar va yutuqlar:
 Ko‘rsatkichlar   va   dinamik   xotira   boshqaruvi:   Talabalar
ko‘rsatkichlarning   qanday   ishlashini   va   xotira   manzillarini   boshqarishni
o‘rganishdi.   new   va   delete   operatorlaridan   foydalanib,   dinamik   xotira
ajratish va bo‘shatish amaliyotlari muvaffaqiyatli bajarildi.
 Dinamik   massivlar   yaratish:   Ko‘rsatkichlardan   foydalangan   holda,
dinamik massivlar yaratish va ulardan foydalanish bo‘yicha tajriba orttirildi.
Bu esa dasturlarga ko‘proq moslashuvchanlik va samaradorlik kiritdi.
 Massiv   elementlarini   tahlil   qilish   va   qayta   ishlash:   Talabalar   massiv
elementlarini   kiritish,   ularni   tahlil   qilish,   yig'indisini   hisoblash,   teskari
tartibda   chiqarish,   eng   katta   va   eng   kichik   elementlarni   topish   kabi   turli
masalalarni muvaffaqiyatli yechishdi.
 Xotirani   samarali   boshqarish:   Dinamik   xotira   ajratish   va   undan
foydalanish   jarayonida   xotira   resurslarini   tejamkorlik   bilan   boshqarish
ko‘nikmalari   shakllandi.   Bu   esa   dasturlarni   yanada   samarali   va   ishonchli
qilishga yordam beradi.
Ushbu kurs ishi davomida ko‘rsatkichlar va massivlar bilan ishlash bo‘yicha
chuqur bilim va tajriba shakllandi. Bu esa ularning dasturlashda yanada murakkab
masalalarni   yechish   qobiliyatini   rivojlantiradi.   Foydalanuvchilar   ushbu   bilim   va
ko‘nikmalarni   kelgusida   real   dasturiy   ta’minot   loyihalarida   samarali   qo‘llash
imkoniyatiga ega bo‘lishadi.  
23 ASOSIY ADABIYOTLAR
1.   R.Hamdamov   va   boshqalar.   Ta’limda   axborot   texnologiyalari.   Uslubiy
qo‘llanma. Toshkent. O‘zbekiston milliy entsiklopediyasi. 2010
2. Robin Nixon. Learning HTML, MySQL&JavaScript with jQuery, CSS &
HTML5, 4th Edition. O`Reilly Media. United States of America. 2015.
3.   Лебедев   С   В . Web- дизайн .   Учеб.пос.   M осква, ЗАО«Издателский дом
Алянс пресс», 2004.
4.  Jamsil   K.  Lalani,  S.,  S.  Weekly   Programming  Web   Professionals  Trans.
from English. A.I.Panasyuk - Mn. LLC "PotPourri", 1997.
5. Malchuk EV. HTML and CSS. self-teacher, 2008.
QO‘SHIMCHA ADABIYOTLAR
1.   U.   Yuldashev,   M.Mamarajabov,   S.Tursunov.   Pedagogik   Web   dizayn.
O‘quv qo‘llanma.T: “Voris”, 2013.
2.   V.G   Olifer,   N.   A.Olifer.   Computer   networks.   Principles,   technologies,
Protocols. St. Petersburg: Publishing House. "Peter," 2000.
3.  R.  Darnell,  "JavaScript:  Handbook."   -  St.  Petersburg:   Publishing   House.
"Peter," 1998.
4. Dmitriev M. JavaScript. Quick start. - St. Petersburg: BHV St. Petersburg
2002 
                              INTERNET SAYTLAR
1. www.pedagog.uz
2.  www.ziyonet.uz
3.  www.dasturchi.uz
4.  http://    www.borlpasc.narod.ru/   
24 25

MAVZU: C++ da ko‘rsatkichlar asosida massiv yaratish va ularni masalalar yechishga qo‘llash I. Kirish II. Asosiy qism 1. C++ da Ko‘rsatkichlar haqida ma’lumot 2. Massiv tushunchasi 3. C++ da ko‘rsatkichlar asosida massiv yaratish va ularni misollarda qo‘llsh III. Xulosa IV. Foydalanilgan adabiyotlar Kirish

C++ dasturlash tilida ko‘rsatkichlar (pointers) va dinamik xotira boshqaruvi muhim tushunchalar hisoblanadi. Ko‘rsatkichlar yordamida xotira manzillarini boshqarish va dinamik massivlar yaratish mumkin. Bu esa dasturlarga ko‘proq moslashuvchanlik va samaradorlikni ta’minlaydi. Ushbu kurs ishida biz ko‘rsatkichlardan foydalangan holda massivlar yaratish va ularni masalalar yechishga qo‘llashni ko‘rib chiqamiz. Dasturlashda massivlar ma’lumotlarni tartiblangan holda saqlash va ularga tezkor murojaat qilish uchun keng qo‘llaniladi. Statik massivlar oldindan belgilangan o‘lchamga ega bo‘lsa, dinamik massivlar kerakli o‘lchamga ko‘ra xotirada joy ajratadi va shu bilan resurslardan tejamkor foydalanishni ta’minlaydi. Dinamik massivlar dastur ishlashi davomida o‘lchamini o‘zgartirishi mumkin, bu esa katta hajmdagi ma’lumotlarni qayta ishlashda juda qulaydir. Ko‘rsatkichlar yordamida dinamik massiv yaratish va ulardan samarali foydalanish ko‘plab masalalarni yechishda katta ahamiyatga ega. Misol uchun, foydalanuvchidan o‘lchami kiritiladigan massivlar yaratish, ularni teskari tartibda chiqarish, eng katta va eng kichik elementlarni topish kabi vazifalarni bajarish mumkin. Bu kabi masalalarni yechish orqali nafaqat dasturlash tilining imkoniyatlarini chuqurroq o‘rganish, balki dasturiy ta’minot yaratish jarayonida samarali kod yozishni o‘rganish mumkin. Ushbu kurs ishining asosiy maqsadi talabalarni ko‘rsatkichlar va dinamik massivlar bilan ishlash bo‘yicha bilim va ko‘nikmalarini rivojlantirishdir. Kurs ishi davomida talabalar quyidagi vazifalarni bajarishlari kerak bo‘ladi 2

ASOSIY QISM 2.1 C++ da Ko‘rsatkichlar haqida ma’lumot 1.1 Ko rsatkich tushunchasi va uni to‘g’ri qo‘llashʻ C++ tilining eng katta afzalliklaridan biri shundaki, u mashina darajasidan abstraktlash paytida yuqori darajadagi dasturlarni yozish, shu bilan birga kerak bo‘lganda apparatga yaqin ishlash imkoniyatini ham beradi. C++ ilova ishlashini bayt va bit darajasida sozlash imkonini beradi. Ko‘rsatkichlarning qanday ishlashini tushunish tizim resurslaridan samarali foydalanadigan dasturlarni yozishni o rganish bosqichlaridan biridir. ʻ Ko‘rsatkichlar . Ko‘rsatkich bu maydon manzilini xotirada saqlaydigan o zgaruvchidir. int o zgaruvchisi butun qiymatni saqlash uchun ishlatilgandek, ʻ ʻ ko rsatkich o zgaruvchisi xotira maydoni manzilini saqlash uchun ishlatiladi. ʻ ʻ 0x101 manzilidagi ko‘rsatkich 0x558 qiymatini o‘z ichiga oladi  Xotiradagi ma’lumotlar 0x558 manzilida 1-rasm 0x558 manziliga ko‘rsatkich Shunday qilib, ko‘rsatkich o zgaruvchidir va barcha ʻ o zgaruvchilar ʻ singari u ham xotiradan joy egallaydi (1-rasmda 0x558 manzilda). Ko‘rsatkichlarni maxsus ko rinishga keltiradigan xususiyat shundaki, ular tarkibidagi qiymatlar (bu ʻ holda, 0x558) xotira maydonlarining manzillari sifatida talqin etiladi. Demak, ko rsatkich bu xotiradagi maydonni ko rsatadigan maxsus o zgaruvchidir. ʻ ʻ ʻ Xotira manzillari odatda o‘n oltilik sanoq sistemasida ko‘rsatiladi, ya’ni 16 xil belgilar yordamida 0-9, so‘ngra A-F. An'anaga ko ra Ox prefiksi o‘n oltilik ʻ sanoq sistemasidan oldin yoziladi. Shunday qilib, OxA o‘n oltilik oltilik sanoq 3

sistemasidagi raqam o‘nlik sanoq sistemasida 10ni ifodalaydi; 0xF - 15; va 0x10 – 16 ni ifodalaydi. Ko‘rsatkichni e'lon qilish . Ko‘rsatkich o zgaruvchi bo lgani uchun uniʻ ʻ boshqa har qanday o zgaruvchi singari e'lon qilish kerak. Odatda, ko rsatkich ʻ ʻ ma’lum bir turdagi qiymatga ishora qiladi (masalan, int tipiga). Bu shuni anglatadiki, ko‘rsatkichda joylashgan manzil butun sonni o‘z ichiga olgan xotiradagi maydonga ishora qiladi. Shuningdek, xotiraning tipga ega bo lmagan ʻ blokiga ko‘rsatkichni belgilashingiz mumkin (void ga ko‘rsatkich deb ham ataladi). Ko‘rsatkich boshqa barcha o‘zgaruvchilar singari e'lon qilinishi kerak: tip_nomi * Ko‘rsatkich_nomi Ko‘pgina o zgaruvchilar bilan bo lgani kabi, agar ko‘rsatkichni ʻ ʻ initsializatsiya qilmasangiz, unda tasodifiy qiymat bo ladi. Tasodifiy xotira ʻ maydoniga kirmaslik uchun ko rsatkich ʻ nullptr¹ qiymati bilan boshlanadi. Ko‘rsatkich qiymati har doim nullptr qiymatiga tengligini tekshirishi mumkin, bu haqiqiy xotira maydonining manzili bo lishi mumkin emas: ʻ tip_nomi * Ko‘rsatkich_nomi = nullptr; Shunday qilib, butun sonli ko rsatkichni e'lon qilish quyidagicha bo‘ladi: ʻ int *pInteger = nullptr; Ko‘rsatkich, shu paytgacha o rganilgan har qanday boshqa ma’lumotlar ʻ turining o zgaruvchisi kabi, initsializatsiyadan oldin tasodifiy qiymatni o‘z ichiga ʻ oladi. Ko‘rsatkich uchun bu tasodifiy qiymat ayniqsa xavflidir, chunki u xotira maydonining ba’zi manzillarini anglatadi. Initsializatsiya qilinmagan ko‘rsatkichlar 4

dasturingizning yaroqsiz xotira maydoniga kirishiga olib kelishi va u dasturni ishdan chiqarishi mumkin. 1 Ushbu qiymat - bo‘sh ko‘rsatkich C ++ da C++11 standartida paydo bo‘ldi. Ilgari, C ga mos keladigan null qiymat ishlatilgan (bu hali ham ishlatilishi mumkin, garchi nullptr faqatgna yangi dasturlar uchun tavsiya etilsa ham). 2.2. Adres oluvchi o zgaruvchilarʻ & adres olish amali. O zgaruvchilar - bu til tomonidan xotirada ʻ ma’lumotlar bilan ishlashni ta’minlaydigan imkoniyat. Agar varName o zgaruvchi bo‘lsa, &varName uning qiymati saqlanadigan ʻ xotira adres o‘rnini qaytaradi. Shunday qilib, agar sintaksisdan foydalangan holda butun o zgaruvchini e'lon qilgan bo lsangiz, sizga tanish bo lgan ʻ ʻ ʻ int age = 30; u holda &age ifodasi belgilangan qiymat 30 joylashtirilgan xotira maydonining manzilini qaytaradi. Yuqorida saqlangan qiymatga kirish uchun foydalaniladigan butun sonli o‘zgaruvchi xotira manzilini olish ko‘rsatilgan tushunchasi ko‘rsatilgan. Misol. O zgaruvchi manzilini olish ʻ #include <iostream> using namespace std; int main() { int age = 15; const double Pi =3.1416; cout <<"age manzili: "<<&age<<endl; cout <<"Pi manzili: "<<&Pi<<endl; return 0; 5