|
O„zbekiston respublikasi oliy va o„rta maxsus ta‟lim vazirligi samarqand davlat universiteti s. Eshtemirov, F. M. Nazarov Pdf ko'rish
|
bet | 123/173 | Sana | 16.05.2024 | Hajmi | 2,67 Mb. | | #238775 |
Bog'liq Tarixi 37 betfloat *a, *b;
buyrug‗i bo‗yicha
a
va
b
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
n
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
n
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
4
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
a
ning dastlabki qiymati hisobga olinyapdi, ya‘ni
0x288ff3c
dan
4
ayrilyapdi (16lik sanoq sistemasida).
Demak, biror o‗zgaruvchining xotiradagi adresini
1
ga oshirmoqchi
bo‗lsak,uning qiymati
1
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.
|
|
Bosh sahifa
Aloqalar
Bosh sahifa
O„zbekiston respublikasi oliy va o„rta maxsus ta‟lim vazirligi samarqand davlat universiteti s. Eshtemirov, F. M. Nazarov
|