1. Sintaksisga kirish Dastur yaratish muhiti



Yüklə 1,17 Mb.
səhifə25/34
tarix19.09.2022
ölçüsü1,17 Mb.
#63802
1   ...   21   22   23   24   25   26   27   28   ...   34
1 kurslarga moljallangan Dasturlash 2 fanidan C Builder muhitida (2)

Ko‘rsatkichlar


Ko‘rsatkich - xotira yacheykasining nomerini saqlovchi unikal o‘zgaruvchidir. Ko‘rsatkich operativ xotiraning qandaydir o‘zgaruvchi joylashishi mumkin bo‘lgan biror joyini aniqlaydi. Ko‘rsatkichning qiymatini o‘zgartirish va variatsiyalash mumkin, bu esa dasturning moslanuvchanligini oshiradi. Ko‘rsatkich odatda turlangan bo‘ladi va quyidagicha e’lon qilinadi:
* = ;
Boshlang‘ich qiymat shu turga tegishli biror o‘zgaruvchidan ko‘rsatkich olish buyrug‘i yoki nol bo‘lishi mumkin. Turlanmagan ko‘rsatkichlar ko‘rsatkich turini o‘zgartirish mo‘ljallangan dasturlarda ishlatiladi va void turdagi o‘zgaruvchining ko‘rsatkichi sifatida ta’kidlanadi.
Biror o‘zgaruvchining manzilining qiymatini olish va uni ko‘rsatkichga o‘zlashtirish uchun «&» buyrug‘i ishlatiladi.

Misol:
int I = 100;


int * p = &I;

«*» - manzili ko‘rsatkichni saqlovchi yacheykaning qiymatiga murojaatni ta’minlovchi teskari buyruq.


Misol:
int I = 100;


int J = 0;
int * p = &I;
J = *(p+sizeof(int));

Ko‘rsatkichlar va massivlar aloqasi


C tilida ko‘rsatkichlar va massivlar o‘rtasida yaqin aloqa mavjud. Masalan, int array[25] ko‘rinishda massiv e’lon qilinganda massivning yigirma beshta elementiga joy ajratish aniqlanadi, balki qiymati massivning tartib bo‘yicha birinchi (nolinchi) elementining manziliga teng array nomli ko‘rsatkich uchun ham joy ajratiladi. Shunday qilib massiv nomsiz bo‘ladi, massivning elementlariga murojaat esa array nomli ko‘rsatkich orqali amalga oshiriladi. Tilning sintaksisi nuqtai nazaridan array ko‘rsatkichi o‘zgarmas hisoblanadi. Uning qiymatini ifodalarda ishlatish mumkin, ammo bu qiymatni o‘zgartirish mumkin emas.
Massiv ko‘rsatkich bo‘lganligi sababli, masalan, quyidagi o‘zlashtirish o‘rinli:
int array[25];
int *ptr;
ptr=array;
Bu yerda ptr ko‘rsatkich massivning birinchi elementi manziliga o‘rnatiladi, undan tashqari ptr=array o‘zlashtirishni unga ekvivalent bo‘lgan ptr=&array[0] ko‘rinishda ham yozish mumkin.

Massiv elementlariga murojaat qilishning ikkita turli usullari mavjud. Birinchi usul kvadrat qavslarda oddiy indeksli ifodalarni ishlatish bilan bog‘liq, masalan, array[16]=3 yoki array[i+2]=7. Murojaatning bunday usulida ikkita ifoda yoziladi, ulardan ikkinchisi kvadrat qavs ichiga olinadi. Bu ifodalarning biri ko‘rsatkich, ikkinchisi esa butun turli ifoda bo‘ladi.


Bu ifodalarni yozish ketma-ketligi ixtiyoriy bo‘lishi mumkin, ammo kvadrat qavs ichiga ikkinchi kelgan ifoda yoziladi. Shuning uchun ham array[16] va 16[array] yozuvlari ekvivalent bo‘ladi va massivning o‘n oltinchi elementi nomerini bildiradi. Indeksli ifodada ishlatilayotgan ko‘rsatkich qandaydir massivni ko‘rsatuvchi o‘zgarmas bo‘lishi shart emas, u o‘zgaruvchi ham bo‘lishi mumkin. Xususan ptr=array o‘zlashtirish bajarilgandan so‘ng massivning o‘n oltinchi elementiga murojaatni ptr ko‘rsatkich yordamida ptr[16] yoki 16[ptr] ko‘rinishda olish mumkin..

Massiv elementiga murojaatning ikkinchi usuli manzilli (adresli) ifodalardan foydalanish va *(array+16)=3 yoki *(array+i+2)=7 ko‘rinishidagi razadresatsiya amali bilan bog‘liq. Murojaatning bunday usulida massivning o‘n oltinchi element manziliga teng manzilli ifoda turli usullarda yozilishi mumkin: *(array+16) yoki *(16+array).


Kompyuterda tadbiq etilganda birinchi usul ikkinchi usulga keltiriladi, ya’ni indeksli ifoda manzilli ifodaga o‘tkaziladi. Ko‘rilayotgan misollar uchun array[16] va 16[array] lar *(array+16) ifodaga almashtiriladi.
Massivning boshlang‘ich elementiga (ya’ni nol indeksli elementiga) murojaat qilish uchun array yoki ptr ko‘rsatkichlarining qiymatlarini ishlatish mumkin. Quyidagi ixtiyoriy ifoda
*array = 2;
array[0] = 2;
*(array+0) = 2;
*ptr = 2;
ptr[0] = 2;
*(ptr+0) = 2;
massivning boshlang‘ich elementiga 2 qiymatni o‘zlashtiradi, ammo *array=2 i *ptr=2 o‘zlashtirishlari barchasidan tezroq bajariladi, chunki ular uchun qo‘shish amalining bajarilishi talab etilmaydi.

Yüklə 1,17 Mb.

Dostları ilə paylaş:
1   ...   21   22   23   24   25   26   27   28   ...   34




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin