O„zbekiston respublikasi oliy va o„rta maxsus ta‟lim vazirligi samarqand davlat universiteti s. Eshtemirov, F. M. Nazarov




Download 2,67 Mb.
Pdf ko'rish
bet123/173
Sana16.05.2024
Hajmi2,67 Mb.
#238775
1   ...   119   120   121   122   123   124   125   126   ...   173
Bog'liq
Tarixi 37 bet

float *a, *b;
buyrug‗i bo‗yicha 
a
va

nomli ko‗rsatkichlarni 
aniqlaymiz. Agar 
a=&n;
buyrug‗i bo‗yicha 
a
ko‗rsatkichning qiymati 
n
ning 
xotiradagi adresiga teng bo‗ladi. Shundan so‗ng 
(*a)
ko‗rsatkich

ning EHM 
xotirasidagi qiymatiga teng qiymatni oladi. Lekin, 
a=&n;
buyrug‗i bo‗lmasa
 (*a) 
ham hech qanday qiymatni olmaydi. Chunki adressiz ko‗rsatkich qaysi qiymatni
olishi mumkin? Agar
a=&n; 
buyrug‗idan keyin 
(*a)++ 
buyrug‗i o‗rniga 
a++ 
buyrug‗idan foydalansak, bu inkrement amali

ning EHM xotirasidagi adresiga 
birni qo‗shmaydi, balki shu adresdan keyingi adres qiymatiga teng qiymatni oladi. 
Masalan
, n
ningxotiradagi adresi 
0x28ff3c 
bo‗lsa,
a++ 
ning qiymati 
0x28ff40 
bo‗ladi. Bunda 
0x28ff3c 
ning ustiga 

ni qo‗shdi. Chunki yuqorida qayd 
qilganimizdek, 
 float 
turli o‗zgaruvchilar xotirada 
4
bayt joyni egallaydi. 
Tabiiyki, 
a=&n; cout<<- - a <<`\n`; 
buyrug‗i natijasi 
0x288ff38 
bo‗ladi. 
Bunda

ning dastlabki qiymati hisobga olinyapdi, ya‘ni 
0x288ff3c 
dan

ayrilyapdi (16lik sanoq sistemasida). 
Demak, biror o‗zgaruvchining xotiradagi adresini 
1
ga oshirmoqchi 
bo‗lsak,uning qiymati 

ga emas, balkio‗sha o‗zgaruvchining xotirada egallaydigan 
joyining hajmi qadar oshadi. 
Xuddi shuningdek, ko‗rsatkichga qandaydir butun sonni qo‗shsak yoki ayirsak 
o‗sha ko‗rsatkich turi xotirada egallaydigan joyi hajmini berilgan butun songa 
ko‗paytirilgani qadar sonni qo‗shish yoki ayirish natijasiga teng bo‗ladi. 
Aytilganlar bo‗yicha quyidagi dasturni va uning natijalarini tahlil qiling. 
#include  
using namespace std; 
int main( ) 


189 

int *y,a,n=-3; 
y=&n; cout <<"*y="<<*y<<'\n'; 
cout <<"y="<y=y+5; cout <<"y+5="<y=y-8; cout <<"y-8="<y=&n-5; cout <<"&n-5="<system ("pause"); 
return 0;} 
Dastur natijasi quyidagicha bo‗ladi. 
*y=-3 
y=0x28ff3c 
y+5=0x28ff50 
y-8=0x28gg30 
&n-5=0x28ff28 
Bunda amallar 16 lik sanoq sistemasida bajarilmoqda. Ko‗rsatkichlar ustida 
qo‗shish amalini bajarib bo‗lmaydi. Lekin, ikkita ko‗rsatkich ustida ayirish amalini 
bajarish mumkin. Bu holni quyidagi dastur misolida namoyish qilamiz. 
#include  
#include  
using namespace std; 
int main( ) 

int *y, *z,a, n=-3; a=14; 
y=&n; cout <<"y="<z=&a; cout <<"z="<cout <<"z-y="<cout <<"*z-*y="<<*z-*y<<'\n'; 
cout <<"*z+*y="<<*z+*y<<'\n'; 
system ("pause"); 
return 0;} 
Dastur natijasi quyidagicha bo‗ladi. 
y=0x28ff34 
z=0x28ff38 
z-y=1 


190 
*z-*y=17 
*z+*y=11 
Dasturni va uning natijalarini mustaqil tahlil qiling. 

Download 2,67 Mb.
1   ...   119   120   121   122   123   124   125   126   ...   173




Download 2,67 Mb.
Pdf ko'rish

Bosh sahifa
Aloqalar

    Bosh sahifa



O„zbekiston respublikasi oliy va o„rta maxsus ta‟lim vazirligi samarqand davlat universiteti s. Eshtemirov, F. M. Nazarov

Download 2,67 Mb.
Pdf ko'rish