Funksiya argumenti sifatida ko’rsatkichlardan foydalanish. Ko’rsatkichlar yordamida dinamik xotiradan foydalanish Hafta: 5 Ma’ruza: 5 Maqsad - Massivlar va ko’rsatkichlar o’rtasidagi bog’likliklarni tushunish
- Ko’rsatkich argumentlarni funksiyaga uzatish
- Funksiyadan ko’rsatkichning qaytishini o’rganish
- Massiv funksiyalari bilan birgalikda ko’rsatkichlardan foydalanish
- Dinamik massiv hosil qilishda new operatoridan foydalanish
- Ob’yektlarni dinamik tarzda yaratish va ularga ko’rsatkich orqali murojaat qilish
- this ko’rsatkichidan foydalanib, ob’yektlarni chaqirish
Massivlar va ko’rsatkichlar Massivda massiv nomi birinchi elementni ko’rsatuvchi konstanta ko’rsatkich hisoblanadi. Tasavvur qiling, quyidagicha massiv e’lon qilingan: Massivlar va ko’rsatkichlar Listing 11.2 ArrayPointer.cpp Ogohlantirish! *(list + 1) dan *list+1 farqli. *list + 1 massiv birinchi elementi qiymatini birga oshiradi, *(list + 1) esa, (list + 1) adresdagi qiymatni oladi. Listing 11.3 PointerWithIndex.cpp Massivlar va ko’rsatkichlar Bu holatda xatolik yuzaga kelishining sababi, massiv nomi konstanta ko’rsatkichligida. C-string da ko’rsatkich Funksiya chaqirilishida ko’rsatkich argumentlarni uzatish C++ funksiyalarida ko’rsatkichlar parametrlar bo’lishi mumkin. Ko’rsatkich argument qiymat orqali yoki havola orqali uzatilishi mumkin. Qiyudagicha aniqlangan funksiyani qaraylik: void f(int* p1, int* &p2) Uning ekvivalenti: typedef int* intP; void f(intP p1, intP& p2) Funksiyada ko’rsatkichlar Quyidagi holatlarni tahlil qilamiz. q1 va q2 ko’rsatkichlari f funksiyaning argumentlari bo’lsin, ya’ni f(q1, q2): - q1 ko’rsatkich p1 ga qiymat orqali uzatilmoqda. *p1 va *q1 bir xil kontentni ko’rsatmoqda. Agar f funksiya *p1 (misol uchun, *p=20) ni o’zgartirsa, u holda *q1 ham o’zgaradi. Ammo, f funksiya p1 (misol uchun, p1=pUzgaruvchi) ni o’zgartirsa, q1 o’zgarmasdan qoladi.
- q2 ko’rsatkich p2 ga havola orqali uzatilmoqda. Shuning uchun q2 va p2 lar hamkorlar hisoblanadi. Ular bir xildirlar. Agar f funksiya *p2 (misol uchun, *p=20) ni o’zgartirsa, u holda *q2 ham o’zgaradi. Agar f funksiya p2 (misol uchun, p2=pUzgaruvchi) ni o’zgartirsa, u holda q2 ham o’zgaradi.
Listing 11.4 TestPointerArgument.cpp Funksiyadan ko’rsatkichning qaytarilishi C++ da funksiya ko’rsatkichni qaytarishi mumkin. Quyidagi listingni qaraymiz: Listing 11.6 ReverseArrayUsingPointer.cpp Dinamik xotira new operatori turlar, massivlar va ob’yektlar uchun bajarilish vaqtida dinamik xotira yaratadi. Listing 11.6 da argument massiv, uni teskari qilish va massivni qaytarish funksiyasi keltirilgan. Tasavvur qiling, haqiqiy massivni o’zgartirmaslik kerak. Massivni argument sifatida uzatib, elementlarini teskari tarzda o’zgartiruvchi, massiv qaytaruvchi funksiyani qayta yozamiz. Uning algoritmi quyidagicha: - Haqiqiy massiv list bo’lsin.
- Haqiqiy massiv o’lchami bilan bir xil bo’lgan result nomli yangi massiv e’lon qilish.
Dinamik xotira 3. Haqiqiy massivning birinchi, ikkinchi va h.k oxirgi elementlaridan yangi massivning oxiridan boshlab nusxa olish, u quyidagi diagrammada ko’rsatilgan: 4. result ni ko’rsatkich sifatida qaytarish. Dinamik xotira Funksiya prototipi quyidagicha: Qadam2 da yangi massiv qanday e’lon qilinadi? Siz quyidagicha e’lon qilib urinib ko’rishingiz mumkin: Ammo C++ da o’lchamni o’zgaruvchi orqali ko’rsatib bo’lmaydi. Bu cheklovdan qutulish uchun massivning o’lchamini 6 deb belgilaymiz. Bu holatda massiv quyidagicha e’lon qilinadi: Listing 11.8 WrongReverse.cpp
Bu xatolikdan chiqish uchun dinamik xotiradan foydalanish lozim.
new operatori C++ da dinamik xotiradan foydalanish mumkin. Xotira new operatori orqali yaratiladi. Misol uchun, int* p = new int(4); Bu yerda new int orqali int o’zgaruvchisi
Do'stlaringiz bilan baham: |