Reja: Adres (manzil) operatori



Yüklə 51,35 Kb.
səhifə4/8
tarix24.05.2023
ölçüsü51,35 Kb.
#121326
1   2   3   4   5   6   7   8
8 mavzu (1)

void ko‘rsatkich. Bu ko‘rsatkich ob’ekt turi oldindan noma’lum bo‘lganda ishlatiladi. void ko‘rsatkichining muhim afzalliklaridan biri - unga har qanday turdagi ko‘rsatkich qiymatini yuklash mumkin-ligidir. void ko‘rsatkich adresidagi qiymatni ishlatishdan oldin, uni aniq bir turga oshkor ravishda keltirish kerak bo‘ladi. void ko‘rsatkichni e’lon qilish kuyidagicha bo‘ladi:
void *;
Ko‘rsatkichning o‘zi o‘zgarmas yoki o‘zgaruvchan bo‘lishi va o‘zgarmas yoki o‘zgaruvchilar adresiga ko‘rsatishi mumkin, masalan:
int i; // butun o‘zgaruvchi
const int ci=1; // butun o‘zgarmas
int * pi; // butun o‘zgaruvchiga ko‘rsatkich
const int *pci; // butun o‘zgarmasga ko‘rsatkich
int *const cp=&i;//butun o‘zgaruvchiga o‘zgarmas
//ko‘rsatkich
const int*const cpc=&ci; // butun o‘zgarmasga o‘zgarmas
// ko‘rsatkich
Misollardan ko‘rinib turibdiki, ‘*’ va ko‘rsatkich nomi ora-sida turgan const modifikatori faqat ko‘rsatkichning o‘ziga tegishli hisoblanadi va uni o‘zgartirish mumkin emasligini bildiradi, ‘*’ belgisidan chapda turgan const esa ko‘rsatilgan adresdagi qiymat o‘zgarmas ekanligini bildiradi.
Ko‘rsatkichga qiymatni berish uchun ‘&’ - adresni olish amali ishlatiladi.
Ko‘rsatkich o‘zgaruvchilarining amal qilish sohasi, yashash davri va ko‘rinish sohasi umumiy qoidalarga bo‘ysunadi.
Ko‘rsatkichga boshlang‘ich qiymat berish
Ko‘rsatkichlar ko‘pincha dinamik xotira (boshqacha nomi «uyum» yoki «heap») bilan bog‘liq holda ishlatiladi. Xotiraning dinamik deyilishiga sabab, bu sohadagi bo‘sh xotira programma ishlash jarayonida, kerakli paytida ajratib olinadi va zarurat qolmaganida qaytariladi (bo‘shatiladi). Keyinchalik, bu xotira bo‘lagi programma tomonidan boshqa maqsadda yana ishlatilishi mumkin. Dinamik xotiraga faqat ko‘rsatkichlar yordamida murojaat qilish mumkin. Bunday o‘zgaruvchilar dinamik o‘zgaruvchilar deyiladi va ularni yashash vaqti yaratilgan nuqtadan boshlab programma oxirigacha yoki oshkor ravishda yo‘qotilgan (bog‘langan xotira bo‘shatilgan) joygacha bo‘ladi.
Ko‘rsatkichlarni e’lon qilishda unga boshlang‘ich qiymatlar berish mumkin. Boshlang‘ich qiymat (initsializator) ko‘rsatkich nomi-dan so‘ng yoki qavs ichida yoki ‘=’ belgidan keyin beriladi. Boshlang‘ich qiymatlar quyidagi usullar bilan berilishi mumkin:
I. Ko‘rsatkichga mavjud bo‘lgan ob’ektning adresini berish:
a) adresni olish amal orqali:
int i=5,k=4; // butun o‘zgaruvchilar
int *p=&i; // p ko‘rsatkichga i o‘zgaruvchining
// adresi yoziladi
int *p1(&k); // p1 ko‘rsatkichga k o‘zgaruvchining
// adresi yoziladi
b) boshqa, initsializatsiyalangan ko‘rsatkich qiymatini berish:
int * r=p; // p oldin e’lon qilingan va qiymatga ega
// bo‘lgan ko‘rsatkich
v) massiv yoki funksiya nomini berish:
int b[10]; // massivni e’lon qilish
int *t=b; // massivning boshlang‘ich adresini berish
void f(int a){/* … */} // funksiyani aniqlash
void (*pf)(int);// funksiyaga ko‘rsatkichni e’lon qilish
pf=f; // funksiya adresini ko‘rsatkichga berish
II. Oshkor ravishda xotiraning absolyut adresini berish:
char *vp = (char *)0xB8000000;
Bunda 0xB8000000 - o‘n oltilik o‘zgarmas son va (char*) - turga keltirish amali bo‘lib, u vp o‘zgaruvchisini xotiraning absolyut adresidagi baytlarni char sifatida qayta ishlovchi ko‘rsatkich turiga aylantirilishini anglatadi.
III. Bo‘sh qiymat berish:
int *suxx=NULL;
int *r=0;
Birinchi satrda maxsus NULL o‘zgarmasi ishlatilgan, ikkinchi satrda 0 qiymat ishlatilgan. Ikkala holda ham ko‘rsatkich hech qanday ob’ektga murojaat qilmaydi. Bo‘sh ko‘rsatkich asosan ko‘rsatkichni aniq bir ob’ektga ko‘rsatayotgan yoki yo‘qligini aniqlash uchun ishla-tiladi.
IV. Dinamik xotirada new amali bilan joy ajratish va uni adresini ko‘rsatkichga berish:
int * n=new int; // birinchi operator
int * m=new int(10); // ikkinchi operator
int * q=new int[5]; // uchinchi operator
Birinchi operatorda new amali yordamida dinamik xotirada int uchun etarli joy ajratib olinib, uning adresi n ko‘rsatkichga yuklanadi. Ko‘rsatkichning o‘zi uchun joy kompilyasiya vaqtida ajra-tiladi.

6.1-rasm. Dinamik xotiradan joy ajratish
Ikkinchi operatorda joy ajratishdan tashqari m adresiga boshlang‘ich qiymat - 10 sonini joylashtiradi.
Uchinchi operatorda int turidagi 5 element uchun joy ajra-tilgan va uning boshlang‘ich adresi q ko‘rsatkichga berilayapti.
Xotira new amali bilan ajratilgan bo‘lsa, u delete amali bilan bo‘shatilishi kerak. YUqoridagi dinamik o‘zgaruvchilar bilan bog‘lan-gan xotira quyidagicha bo‘shatiladi:
delete n; delete m; delete[]q;
Agarda xotira new[] amali bilan ajratilgan bo‘lsa, uni bo‘shatish uchun delete [] amalini o‘lchovi ko‘rsatilmagan holda qo‘llash kerak.
Xotira bo‘shatilganligiga qaramasdan ko‘rsatkichni o‘zini keyinchalik qayta ishlatish mumkin.
Ko‘rsatkich ustida amallar
Ko‘rsatkich ustida quyidagi amallar bajarilishi mumkin:

  1. ob’ektga vositali murojaat qilish amali;

  2. qiymat berish amali;

  3. ko‘rsatkichga o‘zgarmas qiymatni qo‘shish amali;

  4. ayirish amali;

  5. inkrement va dekrement amallari;

  6. solishtirish amali;

  7. turga keltirish amali.

Vositali murojaat qilish amali ko‘rsatkichdagi adres bo‘yicha joylashgan qiymatni olish yoki qiymat berish uchun ishlatiladi:
shar a; // char turidagi o‘zgaruvchi e’loni.
shar *p=new char; // Ko‘rsatkichni e’lon qilib,unga
// dinamik xotiradan ajratilgan
// xotiraning adresini berish
*p=’b’; // p adresiga qiymat joylashtirish
a=*p; // a o‘zgaruvchisiga p adresidagi qiymatni berish
SHuni qayd qilib o‘tish kerakki, xotiraning aniq bir joyidagi adresni bir paytning o‘zida bir nechta va har xil turdagi ko‘rsatkich-larga berish mumkin va ular orqali murojaat qilinganda berilgan-ning har xil turdagi qiymatlarini olish mumkin:
unsigned long int A=0Xcc77ffaa;
unsigned short int * pint=(unsigned short int*)&A;
unsigned char* pchar=(unsigned char*)&A;
cout<Ekranga har xil qiymatlar chop etiladi:

Yüklə 51,35 Kb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin