Ko’rsatgichlar bilan amallar
Ko’rsatgichlar bilan quyidagi amallarni bajarishni mumkin: manzillarga ajratish yoki (*) obyektga bilvosita murojaat, qiymat berish, konstanta bilan qo’shish, ayirish, (++) inkrement, (--) dekrement, taqqoslash, tiplarga keltirish. Ko’rsatgichlar bilan ishlashda ko’pincha (&) adres olish amali qo’llanilladi.
Manzilga ajratish amali, yoki nomlarga ajratish, adresi ko’rsatgichda saqlangan miqdorga kirish uchun mo’ljallangan. Bu amalni miqdor qiymatini olish uchun ham, o’zgartirish uchun ham foydalanish mumkin (agar u konstanta deb elon qilinmagan bo’lsa):
char a; // char tipidagi o’zgaruvchi
char * p = new char; / * ko'rsatgichga va char tipidagi o'zgaruvchiga
xotira ajratish*/
*p = '10' ; a = *p; // ikkila o'zgaruvchiga qiymatlar berish
Misoldan ko’rinadiki, *ko’rsatgich_nomi konstruksiyasini qiymat berish operatorining chap qismida foydalanish mumkin, chunki u L – qiymat hisoblanadi, ya’ni xotira sohasi adresini aniqlaydi. Oddiylik uchun bu konstruksiyani ko’rsatgich murojaat etadigan o’zgaruvchi nomi deb hisoblash mumkin. U bilan tegishli tipdagi miqdorlar uchun aniqlangan barcha amallarni qo’llasa bo’ladi (agar ko'rsatgich initsializatsiyalangan bo'lsa). Xotiraning bitta sohasiga turli tipdagi bir nechta ko’rsatkichlarga murojaat qilishi mumkin. Unga qo’llanilgan adreslarni ajratish amali turli natijalar beradi. Masalan, dastur
#include
int main()
{
unsigned long int A = 0Xcc77ffaa;
unsigned short int* pint = (unsigned short int*) &A;
unsigned char* pchar = (unsigned char *) &A;
printf("| %x | %x | %x |", A, *pint, *pchar);
return 0;
}
IBM PC – muvofiq kompyuerida
| cc77ffaa | ffaa | aa |
satrni ekranga chiqaradi.
pint va pchar ko’rsatgichlar qiymatlari bir xil, lekin pchar ni adresga ajratish natijasida bu adres bo’yicha bitta kichik bayt, pint esa ikkita kichik bayt beradi.
Yuqoridagi misolda ko’rsatgichlarni initsializatsiyalashda tiplarga keltirish amallaridan foydalanildi. Tipga ochiq keltirish amali sintaksisi oddiy: o’zgaruvchi nomi oldiga qavslarda u almashtirish talab etilgan tip ko’rsatiladi. Bunda axborotni saqlash kafolatlanmaydi, shuning uchun umumiy holda tipni ochiq almashtirishlardan foydalanmaslik lozim.
Ko’rsatgichlar ifodasida turli tiplarni aralashtirganda tiplarni ochiq almashtirish void* dan tashqari barcha ko’rsatgichlar uchun talab etiladi. Ko’rsatgich oshkormas ravishda bool tipidagi qiymatga almashish mumkin (masalan, shartli operator ifodasida), bunda nol bo’lmagan ko’rsatgich true ga, nolli esa false ga aylanadi.
Tiplarni oshkormas keltirmasdan qiymat berish ikkita holda mumkin:
void* tipidagi ko’rsatgichlarga;
agar ko’rsatgichlar tipi qiymat berish amalidan chapda va o’ngda bir xil bo’lsa;
Shunday qilib, oshkormas almashtirish faqat void* tipga bajariladi. 0 qiymat oshkormas ixtiyoriy tipdagi ko’rsatkichga almashtiriladi. Obyektlarga ko’rsatgichlarga funksiyaga ko’rsatgichlarni berish (va aksincha) mumkin emas. Ko’rsatgich konstantalarga qiymatlar berish man qilingan, shuningdek ixtiyoriy tipdagi konstantalarga ham (konstantalarga va o’zgaruvchilarga ko’rsatkichlar qiymatlar berish, ko’rsatkich-konstanta murojaat qilgan bo’lsa mumkin).
Do'stlaringiz bilan baham: |