Тилига кириш услубий қўлланма
Ҳаволалар билан ишлашда адрес операторининг(&) қўлланилиши
Download 0.87 Mb.
|
C o\'rganish uchun yaxshi
- Bu sahifa navigatsiya:
- Ҳаволаларга қайта қиймат ўзлаштирилмайди.
Ҳаволалар билан ишлашда адрес операторининг(&) қўлланилиши.Агарда ҳаволанинг адресини олмоқчи бўлсак, у ўзининг адресати адресини қайтаради. Ҳавола ўзига хос табиати айнан шу ҳолатдир. Ҳаволалар ўзларининг адресатларининг псевдонимлари ҳисобланадилар. Яъни улар адресатлари билан бир хил адресга эгадирлар. Ҳаволаларнинг бу хоссаси 9.2 – листингда намойиш қилинган. 9.2 – листинг. Ҳаволанинг адресини олиш. // 9. 2. – листинг. // Ҳаволаларни ишлатишга мисол. # include < iostream.h> int main( ) { int intOne; int &rSomeRef = intOne; int One = 5; cout << “ intOne:” << intOne << endl; cout <<“& intOne:”<< & intOne<< endl; cout<< “& rSomeRef:”<< &rSomeRef << endl; return 0; } НАТИЖА: intOne : 5 rSomeRef : 5 & intOne : 0 X 3500 & rSomeRef: 0 X 3500 ТАҲЛИЛ Бу ҳолатда ҳам rSomeRef ҳаволага intOne ўзгарувчи ўзлаштирилди. Дастурда rSomeRef ҳаволаси intOne ўзгарувчисининг адреси чиқарилди ва улар бир хил эканлиги аниқланди. С++ тилида ҳаволани адресини олиш операцияси қараб чиқилмаган, чунки бу мантиққа мос келмайди. Ҳаволалар тузилиши билан уларга қиймат ўзлаштирилади ва улар ҳақиқатан ҳам ўз адресатларининг синоними бўлиб қоладилар. Адрес оператори буни тасдиқлаб турибди. Ҳаволаларга қайта қиймат ўзлаштирилмайди.Ҳаволалар ўзларининг адресатларининг псевдоними бўлганликлари сабабли уларга қайта қиймат ўзлаштириш мумкин эмас. Агарда бундай ҳол рўй берса, ҳавола мурожаат қилиб турган адресатга ҳам янги қиймат ўзлаштирилади. 9.3- листингда бу ҳолат намойиш қилинган. 9.3. – листинг. Ҳаволага қиймат ўзлаштириш // 9.3. – Листинг. // Ҳаволаларга қиймат ўзлаштириш # include int main() { int intOne; int & rSomeRef = intone; intOne = 5; cout << “ intOne:\ t” << intOne << endl; cout << “ rSomeRef :\ t”<< rSomeRef << endl; cout << “& intOne:\ t” << & intOne << endl; cout << “& rSomeRef:\t”<< & rSomeRef << endl; int intTwo= 8; rSomeRef = intTwo; // Бу ерда сиз кутмаган амал бажарилди. cout << “\n intOne: \ t” << intOne << endl ; cout << “intTwo: \ t “ << intTwo << endl; cout<<“rSomeRef :\t” << rSomeRef << endl; cout<<“& intOne : \t” << & intOne << endl; cout <<“& intTwo : \t” << &intTwo << endl; cout <<“& rSomeRef: \t” <<& rSomeRef<< endl; return 0; } HАТИЖА: intOne : 5 rSomeRef : 5 &intOne : 0 * 213 e &rSomeRef : 0 * 213 e intOne : 8 intTwo : 8 rSomeRef : 8 &intOne : 0 * 213 e &intTwo: 0 * 2130 &rSomeRef : 0 * 213 e ТАҲЛИЛ
17 – сатрда intTwo номли янги ўзгарувчи тузилди ва унга 8 қиймат ўзлаштирилди. 18 – сатрда rSomeRef ҳаволага қайта қиймат ўзлаштиришга, яъни уни intTwo ўзгарувчисининг псевдонимига айлантиришга ҳаракат қилинди. Лекин биз кутган ҳол юз бермади. rSomeRef ҳавола олдингидек intOne ўзгарувчисининг псевдоними бўлиб қолаверди, 18 – сатрда бажарилган амал эса қуйидаги жумлага эвивалент бўлиб қолди холос. intOne = intTwo Бу 19 – ва 21 – сатрлар орқали уларнинг қийматини экранга чиқарилиши натижасида яна бир бор ўз тасдиғини топди: уларнинг қиймати intTwo ўзгарувчисининг қиймати билан устма – уст тушди. 23 – 25 – сатрлар орқали экранга чиқарилган маълумот эса rSomeRef ҳавола intTwo ўзгарувчисига эмас, балки ҳали ҳам intOne ўзгарувчисига мурожаат қилаётганлигини тасдиқлайди. Download 0.87 Mb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling