– DARS. KO’RSATKICHLAR VA MASSIVLAR




Download 313,45 Kb.
bet35/89
Sana16.11.2023
Hajmi313,45 Kb.
#100010
1   ...   31   32   33   34   35   36   37   38   ...   89
Bog'liq
@AKT Official C haqida o\'zbekcha darslar majmui

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.



Download 313,45 Kb.
1   ...   31   32   33   34   35   36   37   38   ...   89




Download 313,45 Kb.

Bosh sahifa
Aloqalar

    Bosh sahifa



– DARS. KO’RSATKICHLAR VA MASSIVLAR

Download 313,45 Kb.