8-ma’ruza. Ko’rsatkichlar va dinamik xotira bilan ishlash



Download 147,89 Kb.
Sana28.06.2022
Hajmi147,89 Kb.
#717150
Bog'liq
8-mavzu kursatkich

8-ma’ruza. Ko’rsatkichlar va dinamik xotira bilan ishlash


Maqsad:

  • Ko’rsatkich nimaligini tavsiflash

  • Ko’rsatkich qanday e’lon qilisnishini va xotira adresiga ta’minlashni o’rganish

  • Qiymatlarga ko’rsatkichlar orqali murojaat qilish

  • typedef kalit so’zi orqali sinonim turlarni yaratish

  • Konstanta ko’rsatkichlar va ma’lumotlarni e’lon qilish

  • Massivlar va ko’rsatkichlar o’rtasidagi bog’liklikni tushuntirish

Ko’rsatkich o’zgaruvchilari ko’rsatkichlar nomi bilan ham ma’lum. Siz ko’rsatkichdan massiv, ob’yekt va o’zgaruvchilarning adreslariga havola qilishda foydalanasiz.
Ko’rsatkichlar C++ ning eng asosiy tushunchalaridan biri hisoblanadi. C++ ning ko’pgina tushunchalari va kutubxonalarini yaratishda ko’rsatkichlardan foydalanilgan. Ko’rsatkichlarni nima uchun muhimligini bilish uchun butun sonlarda qarab chiqamiz. Siz massivda butun sonlarni saqlamoqchisiz. Ammo massivning o’lchamini bilmagan holda uni qanday yaratasiz? Butun sonlarni qo’shish yoki o’chirish natijasida massiv o’lchami o’zgarib turishi mumkin. Buning uchun dastur bajarilayotganda sizga butun sonlar uchun xotiradan joy ajratib turgich va bo’shatib turgich lozim bo’ladi. Bu jarayonni ko’rsatkichlar amalga oshirib beradi.
Ko’rsatkich o’zgaruvchisi oz’ida xotira adresini saqlaydi. * operatori orqali maxsus xotira sohasidagi qiymatga murojaatni amalga oshira olasiz.
Ko’rsatkich o’zgaruvchilari, soddaroq aytganda, ko’rsatkichlar o’zlarining qiymati sifatida xotira adreslarini saqlaydi. Odatda, o’zgaruvchi ma’lumot qiymatini o’zida saqlaydi, misol uchun, butun, haqiqiy va belgili qiymatlar. Ammo ko’rsatkich o’zgaruvchining xotira adresini o’zida saqlaydi.


Yulduzcha operatori



  • operatori bevosita operator(indirection operator) yoki qayta havolalash operatori(dereference operator) nomlari bilan ham ma’lum. Ko’rsatkich qayta havola qilinganda (dereferenced), ko’rsatkichga adresda saqlanayotgan qiymat olinadi.

  • Ko’rsatkichlar bilan ishlashda quyidagilar ahamiyatlidir:

  • C++ yulduzchadan (*) uch turli holatlarda foydalaniladi:

  • Ko’paytirish operatori sifatida;

  • Ko’rsatkich o’zgaruvchisini e’lon qilishda:

int* pCount=&count;

  • Qayta havola qilinuvchi operator(dereference operator) sifatida:

(*pCount)++;
Xavotirlanmang. Kompilyatorning o’zi yulduzcha operatorining nima maqsadda ishlatilishini aniqlab oladi.
Ko’rsatkichlar int yoki double kabi turlarda e’lon qilinadi. O’zgaruvchi adresiga ko’rsatkich qaysi turda e’lon qilinsa, aynan shu turda qiymat ta’minlash lozim. Masalan quyidagi kod xatolik beradi:
int area=1;
double* pArea=&area; //Xato
Siz bir turdagi bir ko’rsatkichni boshqa ko’rsatkichga ta’minlay olasiz, ammo ko’rsatkichni ko’rsatkich bo’lmagan o’zgaruvchiga ta’minlay olmaysiz:
int area=1;
double* pArea=&area;
int i=pArea; //Xato
Ko’rsatkichlar bu o’zgaruvchilar. Shuning uchun o’zgaruvchilarni nomlash konvensiyasi ko’rsatkichlarga ham qo’llaniladi. Farqli jihati shundaki, ko’rsatkichlarni nomlashda p harfini qo’yib ketamiz, pCount va pArea singari.

typedef kalit so’zi yordamida sinonim turlar hosil qilinadi.
unsigned int ning sinonimi sifatida unsigned ishlatiladi. C++ da typedef kalit so’zi yordamida sinonim turlarni yaratishga imkoniyat mavjud. Sinonim turlardan kodlash jarayonini soddalashda va xavfli xatolardan qochishda foydalaniladi.
Uning sintaksisi quyidagicha:
typedef mavjudTur yangiTur;
Misol uchun, quyidagi komandada int turning sinonimi bo’lmish integer aniqlanmoqda:
typedef int integer;
integer qiymat=40;
Typedef orqali yangi tur yaratilmaydi. U asosan ko’rsatkichlar nomlarini o’qishni osonlashtiradi. Misol uchun, int* uchun intPointer turini aniqlaymiz:
typedef int* intPointer;
Endi int turidagi ko’rsatkich o’zgaruvchisini quyidagicha e’lon qilish mumkin:
intPointer p; int* p;
int* p1, p2;
intPointer p1, p2;
Konstanta ko’rsatkich konsatnta xotira sohasini ko’rsatadi, ammo xotira sohasidagi qiymat o’zgarishi mumkin.
Bilasizki, konsatntalarni o’zgartirish mumkin emas. Siz konstanta ko’rsatkich e’lon qilishingiz mumkin. Misol uchun,
double radius = 5;
double* const p = &radius;
Bu yerda p konstanta ko’rsatkich. Keyinroq p ga boshqa adresni ta’minlay olmaymiz. Bu yerda faqat p konstanta, p orqali ko’rsatilayotgan ma’lumot esa konstanta emas. Siz uni o’zgartirishingiz mumkin.
*p=10;

Bu holatda ko’rsatkich ham, ma’lumot ham konstanta.
Agar siz ko’rsatkichni quyidagicha e’lon qilsangiz:
const double* p=&radius;
u holda ko’rsatkich konsatnta emas, ammo ko’rsatkich ko’rsatatyotgan ma’lumot konsatnta. Misol uchun,

Download 147,89 Kb.

Do'stlaringiz bilan baham:




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