Тилига кириш услубий қўлланма


Нол кўрсатгичлар ва ҳаволалар



Download 1,12 Mb.
bet74/86
Sana21.03.2022
Hajmi1,12 Mb.
#505048
1   ...   70   71   72   73   74   75   76   77   ...   86
Bog'liq
C qo`llanma

Нол кўрсатгичлар ва ҳаволалар.


Агарда кўрсаткичга қиймат ўзлаштирилмаган ёки у бўшатилган бўлса унга нол қиймат (0) бериш лозим. Бу ҳолат ҳаволаларга (ссылкаларга) тегишли эмас. Умуман, ҳаволалар нол бўлмаслиги лозим ва нол объектларга ҳаволаларни сақловчи дастур нокоррект ҳисобланади. Нокоррект дастурнинг ишлаш жараёнида турли хатолик пайдо бўлиши мумкин.


Функцияга аргументларни ҳавола кўринишда узатилиши.


5 – мавзуда функциялардаги иккита камчилик, уларга аргументларни қиймат сифатида узатилишида аргумент қилиб узатилган объект билан узатилаётган ўзгарувчиси орасида алоқани узилиши (уларни алоҳида – алоҳида объект деб эътироф этилиши) ҳамда функцияларни фақатгина битта қиймат қайтариши билан танишган эдик.


Бу иккала чеклашни функцияга аргументларни ҳавола кўринишда узатиш орқали ҳал қилиш мумкин. С++ тилида функцияга аргументларни ҳавола кўринишида узатишда икки усулдан фойдаланилади. Улар ёки кўрсаткичлар ёрдамида, ёки ҳаволалар ёрдамида узатилади.
Кўрсатгичнинг қўлланилиш синтаксиси ҳаволанинг ишлатилиш синтаксисидан фарқ қилишига қарамай улар ёрдамида бир хил иш бажарилади. Функцияга унинг кўриниш соҳаси чегараси учун объектнинг нусхаси ўрнига унинг ўзи узатилади.
Биз 5 – мавзуда функцияга узатиладиган параметрлар хотира стекида жойлашиши билан танишган эдик. Агарда функцияга ҳавола кўринишида қиймат узатилса стекда объектнинг ўзи эмас балки унинг адреси жойлашади.
Кўпгина компютерларда адрес махсус регистрда сақланади. Ихтиёрий ҳолда компиляторни жорий объектга ҳавола қилиш, зарурат туғилганда уни ўзгартириш унинг нусхаси устида эмас, балки тўғридан – тўғри объектнинг ўзида бажарилади. Қуйидаги листингларда функцияга параметрларни қиймат ва ҳавола сифатида узатишнинг ўзига хос хусусиятлари билан танишамиз.
9.5. – листинг. Функцияга аргументни қиймат сифатида узатилиши

  1. //9.5.–листинг. Параметрларни қиймат сифатида узатиш

  2. # include < iostream.h>

  3. void swap ( int x, int y);

  4. int main( )

  5. {

  6. int x=5,y=10;

  7. cout<<“Main. Before swap, x:”<

  8. cout<<“\n”;

  9. swap(x,y);

  10. cout<<“Main.After swap, x:”<

  11. cout<<“\n”;

  12. return 0;

  13. }

  14. void swap ( int x, int y)

  15. {

  16. int temp;

  17. cout << “ Swap. Before Swap, x :”<

  18. cout <

  19. temp = x;

  20. x=y;

  21. y=temp;

  22. cout << “Swap. After Swap, x:” << x

  23. cout << “y:”<

  24. }

НАТИЖА:
Main.Before Swap, x: 5 y: 10
Swap.Before Swap, x: 5 y: 10
Swap.After Swap, x: 10 y: 5
Main.After Swap, x: 5 y: 10
Бу программада main() функциясида иккита ўзгарувчига қиймат ўзлаштирилади, кейин эса улар swap() функциясига узатилади. swap() функцияси бу ўзгарувчиларнинг қийматларини алмаштиради. Лекин бу ўзгарувчилар main() функциясида қайта текширилганда улар ўзгармаганлиги аниқланади. Бу ерда муаммо нимадан иборат?
х ва у ўзгарувчилар swap() функциясига қиймат бўйича узатилди. Яъни бу ҳолатда бу ўзгарувчиларнинг локал нусхаси функция ичида ҳосил қилинади. swap() функцияси ичида амаллар ана шу ўзгарувчиларнинг нусхалари устида бажарилган. Функция ўз ишини тугатиши билан бу нусхалар учун ажратилган жой тозаланади, яъни ўзгарувчилар хотирадан ўчирилади. swap() функциясидан ташқарида эса х ва y ўзгарувчилари олдинги қийматларини сақлаб турган эди. Натижада x ва y ўзгарувчиларининг қийматларини swap() функцияси ишини тугатгандан кейин чиқарилишида х ва у ўзгарувчилар дастлабки қийматларини қайтардилар.
Функция ўз ишини тугатгандан кейин ҳам у томонидан ўзгартирилган объектлар ўз қийматларини сақлаб қолиш учун жорий объектларни функция параметрига ҳавола кўринишида узатиш лозим. С++ тилида бу масалани ечишни икки усули мавжуд: swap() функциясига параметрларни берилган қийматларга кўрсатгич қилиб узатиш ёки берилган қийматларга ҳаволани параметр сифатида узатиш лозим.

Download 1,12 Mb.

Do'stlaringiz bilan baham:
1   ...   70   71   72   73   74   75   76   77   ...   86




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish