1 – dars. C++ Dasturlash tilining kelib chiqishi xaqida ma’lumot


– DARS. KO’RSATKICHLAR VA MASSIVLAR



Yüklə 4,49 Mb.
səhifə35/89
tarix29.11.2023
ölçüsü4,49 Mb.
#140314
1   ...   31   32   33   34   35   36   37   38   ...   89
C kitob TAYYOR

36 – DARS. KO’RSATKICHLAR VA MASSIVLAR

Ko’rsatkichlar qiymati yuqorida ko’rsatilganidek bu biror ob'ekt adresidir.


Ko’rsatkichlar ta'riflanganda ularning tiplari ko’rsatilishi shart. K’orsatkichlarni initsializatsiya qilish ya'ni boshlang’ich qiymatlarini kiritish mumkin. Ko’rsatkichlarga boshlangich mahsus NULL kiymati berilsa bunday kursatkich bush kursatkich deb ataladi.
Misol uchun:
Long double ld=0.0;
Long double *ldtr=&ld;
Int *pr;
char *alfa;
unsigned longint *ul=NULL;
Mahsus void tipidagi ko’rsatkichlar ajdodiy ko’rsatkichlar deb atalib har hil tipdagi ob'ektlar bilan bog’lanish uchun ishlatiladi.
Misol uchun:
Int I=77;
Float Euler=2.18282;
Void *vp;
Vp=&I;
Cout<<(“%d”,*(int*)vp);
Vp=&euler;
Cout<<(“%d”,*(float*)vp);
Qo’yidagi operatorlar ketma ketligi hatolikka olib keladi:
Void *vp;int *ip; ip=vp;
Bu hatolik sababi bitta ob'ektga har hil tipdagi ko’rsatkichlar bilan murojaat qilish mumkin emas. Ko’rsatkichlar ustida qo’yidagi amallarni bajarish mumkin:
* operatsiyasi o’zgaruvchi qiymatini adres deb qarab shu adresda joylashgan qiymatni ajratadi.
& operatsiyasi o’zgaruvchi joylashgan adresni aniqlaydi.
= Qiymat berish
+ Binar plyus
- Binar minus
++ Oshirish
-- Kamaytirish
Nisbat amallari;
Adresni aniqash amaliga misol:
Unsigned int *up1=NULL, *up2;
Up2=(unsigned int*)&up1;
Qiymat berish operatorida tiplarni o’zgartirishni ko’rsatmaslik ya'ni up2=&up1 hatolikka olib keladi.
Ayirish amali ikki ko’rsatkich yoki ko’rsatkich va butun son ustida amalga oshirilishi mumkin. Ikki ko’rsatkich ayirmasi p1-p2=((long)p1-(long)p2)/sizeof() formulasi orqali aniqlanadi. Ikki yonma-yon ko’rsatkichlar ayirmasi absolyut qiymati birga teng.
1- misol
char a=’d’,b=’2’;
char pa=&a,pb=&b;
U holda BC++ da
Pa-pb =1;
(int)pa-(int)pb=1;
pb-pa=-1 bo’ladi, chunki BC++da oldin ta'riflangan o’zgaruvchilar adreslari keyin ta'riflangan o’zgaruvchilar adreslaridan kattaroq bo’ladi.

2- misol


long a=12, b=3;
long pa=&a,pb=&b;
U holda BC++ da
Pa-pb =1;
(int)pa-(int)pb=4;
Ko’rsatkichdan k butun son ayrilganda qiymati k*sizeof() ga kamayadi.
Qo’shish amalini faqat ko’rsatkich va songa qo’llash mumkin.
Misol:
Float z=0.0,pi=3.14,e=2.7;
Float *pr=&e;
U holda
*pr=2.7
*(pr+1)=3.14
*(pr+2)=0.0
++ va – amallari ham shu kabi bajariladi.
Massivlar nomi konstanta ko’rsatkichdir. Shuning uchun ham int z[4] massiv elementiga *(z+4) shaklda murojaat qilish mumkin.
Massivlar bilan ishlanganda qavslarsiz ishlash mumkin.
Qo’yidagi misolda har bir harf alohida bosib chiqariladi:
Void main()
{ char x[][=”DIXI”;
int=0;
while (*(x+I)!=’\0’)
Cout<<(“/n%c”,*(x=I++));
}
Kompilyator x[I] qiymatni hisoblaganda (x+i)*sizeof(<>) formula bo’yicha adresni hisoblab shu adresdagi qiymatni oladi. Agar massiv x[n,k,m] shaklda ta'riflangan bo’lsa, x[I,j,l] qiymatni hisoblanganda (x+k*j+l) *sizeof(<>) formula bo’yicha adresni hisoblab shu adresdagi qiymatni oladi.



Yüklə 4,49 Mb.

Dostları ilə paylaş:
1   ...   31   32   33   34   35   36   37   38   ...   89




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

    Ana səhifə