cpp_logo

C++ qadamlari. Ko’rsatkichlar(2).

Avvalgi darsda qisqacha ko’rsatkich haqida ma’lumot oldik. Endi misollar orqali bu muhim mavzuni yaxshiroq o’zlashtiramiz. Yaxshi dasturchi bo’lishning yaxshi yo’li amaliyot, amaliyot va yana amaliyot!

Oddiy ko’rsatkichni e’lon qilishni eslaylik:

int *a;

Bunda int tipidagi ma’lumotni o’zida saqlaydigan a ning manziliga yo’nalgan ko’rsatkich e’lon qilindi. Doim yodda saqlash zarurki, ko’rsatkich e’lon qilingani bilan, hali unga biror xotira ajratilmadi. Agar shu holida ko’rsatkichdan foydalanmoqchi bo’lsak, dastur ishlamaydi. Chunki yerdan joy ajratib ekilmagan daraxtdan meva olish aqlga sig’maydi. Buni huddi bozordan ekish uchun daraxt ko’chati olib kelib uni ekishga hali biror yerdan joy ajratmaganingiz misol bo’ladi. Demak ko’chatimiz uchun chuqur kavlaymiz:

a = new int;

Dasturchilar ko’p unutadigan narsa e’lon qilingan ko’rsatkich xotirasiga boshlang’ish qiymat bermaslik. Chunki xotirada ixtiyoriy qiymat turgan bo’lishi mumkin, undan foydalanganda yoki o’zgartirganda kutilmagan xatoliklar kelib chiqishi mumkin. Dereference orqali unga biror boshlang’ich qiymat beramiz: [code]*a = 11;[/code]

Xotiradan joy ajratildi. Ko’rsatkichimiz aniq bir xotira manzilini ko’rsatib turibdi. Daraxt ekilgan joydagi daraxtni olib tashlab o’rniga boshqa daraxt ekish mumkin bo’lganidek, xotiradagi manzilni bilib undagi qiymatni istalgancha o’zgartirishimiz mumkin.(*a=5, *a=-10,…)

O’tgan darsda bitta funksiya ichida o’zgaruvchilarni o’zgartirishni ko’rgan edik. Endi aynan bir funksiya ichida e’lon qilingan o’zgaruvchini boshqa funksiyada o’zgartirish bilan tanishamiz. Avval misollar bilan tanishib, so’ngra uni qanday ishlashi bilan batafsil tanishamiz. Agar misolni qanday ishlashini tushuna olsangiz, umid qilamizki c++ tilida ko’rsatkichlar bilan bog’liq muammoga kamroq duch kelasiz.

 

  1. void cplusStili(int &a, int &b){
  2. a*=10;
  3. b*=11;
  4. }
  5.  
  6. void cStili(int *a, int *b){
  7. *a = -10;
  8. *b = -2;
  9. }
  10.  
  11. int main(int argc, char** argv)
  12. {
  13. int *a;
  14. int *b;
  15.  
  16. a = new int; //xotiradan joy ajratish
  17. b = new int;
  18.  
  19. *a=3; // boshlang'ish qiymat berish (muhim!)
  20. *b=4;
  21.  
  22. cplusStili(*a, *b);
  23.  
  24. cout << " *a=" << *a << endl;
  25. cout << " *b=" << *b << endl;
  26.  
  27. cStili(a, b);
  28.  
  29. cout << " *a=" << *a << endl;
  30. cout << " *b=" << endl;
  31.  
  32. return 0;
  33. }

 

Dastur natijasi qanday bo’lishini o’quvchiga qoldiramiz.

Demak C++ tilida funksiyaga o’zgaruchi manzilini berib yuborsak, o’sha funksiya ichida uni istalgan “kuy”ga solish mumkin ekan. Chaqirilgan funksiyadagi o’zgaruvchidagi o’zgarishlar saqlanadi. C tilida ham huddi shunday imkoniyat bor, farqi, C da funksiyaga ko’rsatkich beriladi va funksiya ichida ko’rsatkich dereference orqali o’zgaruchi qiymati o’zgartiriladi. Java tilida bunday imkoniyat yo’q. Funksiyaga berib yuborilgan qiymat nusxasi olinib o’zgartiriladi va asl o’zgaruvchi holati saqlanadi.

(718 marta o'qilgan, bugun 1 marta o'qildi)

O'xshash maqolalar: