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 yetarli joy ajratib olinib, uning adresi n koʻrsatkichga yuklanadi.
Koʻrsatkichning oʻzi uchun joy kompilyasiya vaqtida ajratiladi.
delete amali
Ikkinchi operatorda joy ajratishdan tashqari m adresiga
boshlangʻich qiymat - 10 sonini joylashtiradi.
Uchinchi operatorda inttipidagi 5 ta element uchun joy ajratilgan
va uning boshlangʻich adresi q koʻrsatkichga berilyapti.
Xotira new amali bilan ajratilgan boʻlsa, u delete amali bilan
boʻshatilishi kerak. Yuqoridagi dinamikoʻzgaruvchilar bilan
bogʻlangan 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:
ob’ektga vositali murojaat qilish amali;
qiymat berish amali;
koʻrsatkichga oʻzgarmas qiymatni qoʻshish amali;
ayirish amali;
inkrement va dekrement amallari;
solishtirish amali;
tipga keltirish amali.
Vositali murojaat qilish. Vositali murojaat qilish amali
koʻrsatkichdagi adres boʻyicha joylashgan qiymatni olish yoki qiymat
berish uchun ishlatiladi:
char a; // char tipidagi oʻzgaruvchi eʻloni
|
char *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 etib oʻtish kerakki, xotiraning aniq bir joyidagi adresni
bir paytning oʻzida bir nechta va har xil tipdagi koʻrsatkichlarga berish
mumkin va ular orqali murojaat qilinganda ma’lumotlarning har xil
tipdagi 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:
cc77ffaa ffaa aa
|
Oʻzgaruvchilar bitta adresda joylashgan holda yaxlit qiymatning
turli boʻlaklarini oʻzlashtiradi. Bunda, bir baytdan katta joy egallagan
son qiymatining xotirada «teskari» joylashishi inobatga olinishi kerak.
Agar har xil tipdagi koʻrsatkichlarga qiymatlar berilsa, albatta tipga
keltirish amalidan foydalanish kerak:
int n=5;
float x=1.0;
int *pi=&n;
float *px=&x;
void *p;
int *r,*r1;
px=(float *)&n;
p=px;
r=(int *)p;
r1=pi;
|
Do'stlaringiz bilan baham: |