Adresni olish amali bilan ishlash Adresni olish quyidagicha e’lon qilinadi: - &;
- Bu erda - adresi olinadigan qiymatning turi, - adres oluvchi o‘zgaruvchi nomi. O‘rtadagi ‘&’ belgisiga adresni olish amali deyiladi.
- Bu ko‘rinishda e’lon qilingan o‘zgaruvchi shu turdagi o‘zgaruvchining sinonimi deb qaraladi. Adresni olish amali orqali bitta o‘zgaruvchiga har xil nom bilan murojaat qilish mumkin bo‘ladi.
Misol: - Misol:
- int kol;
- int & pal=kol; // pal murojaati, u kol
- // o‘zgaruvchisining alternativ nomi
- const char & cr=’\n’; // cr - o‘zgarmasga murojaat
- Adresni olish amalini ishlatishda quyidagi qoidalarga rioya qilish kerak: adres oluvchi o‘zgaruvchi funksiya parametri sifatida ishlatilgan yoki extern bilan tavsiflangan yoki sinf maydoniga murojaat qilingandan holatlardan tashqari barcha holatlarda boshlang‘ich qiymatga ega bo‘lishi kerak.
- Adresni olish amali asosan funksiyalarda adres orqali uzatiluvchi parametrlar sifatida ishlatiladi.
- Adres oluvchi o‘zgaruvchining ko‘rsatkichdan farqi shundaki, u alohida xotirani egallamaydi va faqat o‘z qiymati bo‘lgan o‘zgaruvchining boshqa nomi sifatida ishlatiladi.
- Ko‘rsatkichlar va adres oluvchi o‘zgaruvchilar funksiya parametri sifatida
Funksiya prototipida yoki aniqlanish sarlavhasida ko‘rsatilgan parametrlar formal parametrlar deyiladi, funksiya chaqirishida ko‘rsatilgan argumentlarga faktik parametrlar deyiladi. - Funksiya chaqirilishida faktik parametrning turi mos o‘rindagi formal parametr turiga to‘g‘ri kelmasa yoki shu turga keltirishning iloji bo‘lmasa kompilyasiya xatosi ro‘y beradi.
- Faktik parametrlarni funksiyaga ikki xil usul bilan uzatish mumkin: qiymati yoki adresi bilan.
- Funksiya chaqirilishida argument qiymat bilan uzatilganda, argument yoki uning o‘rnidagi kelgan ifoda qiymati va boshqa argu-mentlarning nusxasi (qiymatlari) stek xotirasiga yoziladi. Funksiya faqat shu nusxalar bilan amal qiladi, kerak bo‘lsa bu nusxalarga o‘zgartirishlar qilinishi mumkin, lekin bu o‘zgarishlar argument-ning o‘ziga ta’sir qilmaydi, chunki funksiya o‘z ishini tugatishi bilan nusxalar o‘chiriladi (stek tozalanadi).
- Agar parametr adres bilan uzatilsa, stekka adres nusxasi yoziladi va xuddi shu adres bo‘yicha qiymatlar o‘qiladi (yoziladi). Funksiya o‘z ishini tugatgandan keyin shu adres bo‘yicha qilingan o‘zgarishlar saqlanib qolinadi va bu qiymatlarni boshqa funksiyalar ishlatishi mumkin.
- Argument qiymat bilan uzatilishi uchun mos formal parametr sifatida o‘zgaruvchini turi va nomi yoziladi. Funksiya chaqirilishida mos argument sifatida o‘zgaruvchining nomi yoki ifoda bo‘lishi mumkin.
Faktik parametr adres bilan uzatilganda unga mos keluvchi formal parametrni ikki xil usul bilan yozish mumkin: ko‘rsatkich orqali yoki adresni oluvchi parametrlar orqali. Ko‘rsatkich orqali yozilganda formal parametr turidan keyin ‘*’ belgisi yoziladi, mos argumentda esa o‘zgaruvchining adresi (& amal orqali) yoki massiv nomi, yoki funksiya nomi bo‘lishi mumkin. Adresni olish amali orqali parametr uzatishda formal parametrda turidan keyin ‘&’ belgisi yoziladi va funksiya chaqirilishida mos argument sifatida o‘zgaruvchi nomi keladi. - Faktik parametr adres bilan uzatilganda unga mos keluvchi formal parametrni ikki xil usul bilan yozish mumkin: ko‘rsatkich orqali yoki adresni oluvchi parametrlar orqali. Ko‘rsatkich orqali yozilganda formal parametr turidan keyin ‘*’ belgisi yoziladi, mos argumentda esa o‘zgaruvchining adresi (& amal orqali) yoki massiv nomi, yoki funksiya nomi bo‘lishi mumkin. Adresni olish amali orqali parametr uzatishda formal parametrda turidan keyin ‘&’ belgisi yoziladi va funksiya chaqirilishida mos argument sifatida o‘zgaruvchi nomi keladi.
- Misol:
- #include
- void f(int,int*,int &)
- void main()
- {
Adresni olish amali - Adresni olish amali
- Adresni olish quyidagicha e’lon qilinadi:
- &;
- Bu erda - adresi olinadigan qiymatning turi, - adres oluvchi o‘zgaruvchi nomi. O‘rtadagi ‘&’ belgisiga adresni olish amali deyiladi.
- Bu ko‘rinishda e’lon qilingan o‘zgaruvchi shu turdagi o‘zgaruvchining sinonimi deb qaraladi. Adresni olish amali orqali bitta o‘zgaruvchiga har xil nom bilan murojaat qilish mumkin bo‘ladi.
Adresni olish amali asosan funksiyalarda adres orqali uzatiluvchi parametrlar sifatida ishlatiladi. - Adresni olish amali asosan funksiyalarda adres orqali uzatiluvchi parametrlar sifatida ishlatiladi.
- Adres oluvchi o‘zgaruvchining ko‘rsatkichdan farqi shundaki, u alohida xotirani egallamaydi va faqat o‘z qiymati bo‘lgan o‘zgaruvchining boshqa nomi sifatida ishlatiladi.
- Ko‘rsatkichlar va adres oluvchi o‘zgaruvchilar funksiya parametri sifatida
- Funksiya prototipida yoki aniqlanish sarlavhasida ko‘rsatilgan parametrlar formal parametrlar deyiladi, funksiya chaqirishida ko‘rsatilgan argumentlarga faktik parametrlar deyiladi.
- Funksiya chaqirilishida faktik parametrning turi mos o‘rindagi formal parametr turiga to‘g‘ri kelmasa yoki shu turga keltirishning iloji bo‘lmasa kompilyasiya xatosi ro‘y beradi.
Faktik parametrlarni funksiyaga ikki xil usul bilan uzatish mumkin: qiymati yoki adresi bilan. - Faktik parametrlarni funksiyaga ikki xil usul bilan uzatish mumkin: qiymati yoki adresi bilan.
- Funksiya chaqirilishida argument qiymat bilan uzatilganda, argument yoki uning o‘rnidagi kelgan ifoda qiymati va boshqa argu-mentlarning nusxasi (qiymatlari) stek xotirasiga yoziladi. Funksiya faqat shu nusxalar bilan amal qiladi, kerak bo‘lsa bu nusxalarga o‘zgartirishlar qilinishi mumkin, lekin bu o‘zgarishlar argument-ning o‘ziga ta’sir qilmaydi, chunki funksiya o‘z ishini tugatishi bilan nusxalar o‘chiriladi (stek tozalanadi).
- Agar parametr adres bilan uzatilsa, stekka adres nusxasi yoziladi va xuddi shu adres bo‘yicha qiymatlar o‘qiladi (yoziladi). Funksiya o‘z ishini tugatgandan keyin shu adres bo‘yicha qilingan o‘zgarishlar saqlanib qolinadi va bu qiymatlarni boshqa funksiyalar ishlatishi mumkin.
Argument qiymat bilan uzatilishi uchun mos formal parametr sifatida o‘zgaruvchini turi va nomi yoziladi. Funksiya chaqirilishida mos argument sifatida o‘zgaruvchining nomi yoki ifoda bo‘lishi mumkin. - Argument qiymat bilan uzatilishi uchun mos formal parametr sifatida o‘zgaruvchini turi va nomi yoziladi. Funksiya chaqirilishida mos argument sifatida o‘zgaruvchining nomi yoki ifoda bo‘lishi mumkin.
- Faktik parametr adres bilan uzatilganda unga mos keluvchi formal parametrni ikki xil usul bilan yozish mumkin: ko‘rsatkich orqali yoki adresni oluvchi parametrlar orqali. Ko‘rsatkich orqali yozilganda formal parametr turidan keyin ‘*’ belgisi yoziladi, mos argumentda esa o‘zgaruvchining adresi (& amal orqali) yoki massiv nomi, yoki funksiya nomi bo‘lishi mumkin. Adresni olish amali orqali parametr uzatishda formal parametrda turidan keyin ‘&’ belgisi yoziladi va funksiya chaqirilishida mos argument sifatida o‘zgaruvchi nomi keladi.
Misol: - Misol:
- #include
- void f(int,int*,int &)
- void main()
- {
- int i=1,j=2,k=3;
- cout<
- f(i,&j,k);
- cout<
- }
- void f(int i;int *j;int &k)
- {
- i++;
- (*j)++;
- k++;
- *j=i+k;
- k=*j+i;
- }
Programma ishlashi natijasida ekranga quyidagi qiymatlar chop qilinadi: - Programma ishlashi natijasida ekranga quyidagi qiymatlar chop qilinadi:
- 1 2 3
- 1 6 8
- Bu misolda birinchi parametr i qiymat bilan uzatiladi (“int i"). Uning qiymati funksiya ichida o‘zgaradi, lekin tashqaridagi i o‘zga-ruvchisining qiymati o‘zgarmaydi. Ikkinchi parametrni ko‘rsatkich orqali adresi bilan uzatilishi talab qilinadi (“int *j”), adresni uzatish uchun ‘&’- adresni olish amali ishlatilgan (“&j”). Funksiya tanasida argument adresidan qiymat olish uchun ‘*’- qiymat olish amali qo‘llanilgan. Uchinchi parametrda murojaat orqali (“&k”) argumentning adresi uzatish ko‘zda tutilgan. Bu holda funksiya chaqirilishida mos argument o‘rnida o‘zgaruvchi nomi turadi, funksiya ichida esa qiymat olish amalini ishlatishning hojati yo‘q. Funksiya ishlash natijasidagi qiymatlarni argumentlar ro‘yxati orqali olish qulay va tushunarli usul hisoblanadi.
- Agar funksiya ichida adres bilan uzatiladigan parametr qiymati o‘zgarmasdan qolishi zarur bo‘lsa, bu parametr const modifikator bilan yozilishi kerak:
- fun(int n,const char*str);
- Agarda funksiyani chaqirishda argumentlar faqat nomlari bilan berilgan bo‘lsa, kelishuv bo‘yicha massivlar va funksiyalar adresi bilan, qolgan turdagi parametrlar qiymatlari bilan uzatilgan deb hisoblanadi.
Misol tariqasida diskriminantni hisoblash usuli yordamida ax2+bx+c=0 ko‘rinishidagi kvadrat tenglama ildizlarini funksiya parametrlari vositasida olish masalasini ko‘raylik. - Misol tariqasida diskriminantni hisoblash usuli yordamida ax2+bx+c=0 ko‘rinishidagi kvadrat tenglama ildizlarini funksiya parametrlari vositasida olish masalasini ko‘raylik.
- #include
- #include
- int Kvadrat_Ildiz(float a,float b,float c,
- float & x1, float & x2)
- {
- float D;
- D=b*b-4*a*c;
- if(D<0) return 0;
- if(D==0)
- {
- x1=x2=-b/(2*a);
- return 1;
- }
else - else
- {
- x1=(-b+sqrt(D))/(2*a);
- x2=(-b-sqrt(D))/(2*a);
- return 2;
- }
- }
int main() - int main()
- {
- float a,b,c,D,x1,x2;
- cout<<”ax^2+bx+c=0 tenglama ildizini topish. ”;
- cout<<”\na - koeffisiyentni kiriting: ”; cin>>a;
- cout<<”\nb - koeffisiyentni kiriting: ”; cin>>b;
- cout<<”\nc - koeffisiyentni kiriting: ”; cin>>c;
- switch (Kvadrat_Ildiz(a,b,c,x1,x2))
- {
case 0: cout<<“Tenglama haqiqiy ildizga ega emas!”; - case 0: cout<<“Tenglama haqiqiy ildizga ega emas!”;
- break;
- case 1: cout <<“Tenglama yagona ildizga ega: ”;
- cout<<”\n x= “<
- break;
- default:cout<<“Tenglama ikkita ildizga ega: ”;
- cout<<”\nx1= “<
- cout<<”\nx2= “<
- }
- return 0;
- }
- Programmadagi Kvadrat_Ildiz() funksiyasi kvadrat tenglama ildizini hisoblaydi. Uning qaytaradigan qiymati tenglamaning nechta ildizi borligini anglatadi. Agar tenglamaning haqiqiy ildizi mavjud bo‘lmasa (D<0), funksiya 0 qiymatini qaytaradi. Agar D=0 bo‘lsa, funksiya 1 qiymatini qaytaradi. Agar D>0 bo‘lsa funksiya 2 qiymatini qaytaradi. Mavjud ildizlar-x1 va x2 adres oluvchi parametrlarda qaytariladi.
Do'stlaringiz bilan baham: |