C++ dasturlash tili Ko'rsatgichlar, referatlar va dinamik xotira ajratish
Bilvosita yoki dereferencing operatori (
Download 267.5 Kb.
|
Язык программирования C
- Bu sahifa navigatsiya:
- Korsatkich ham turiga ega
1.4 Bilvosita yoki dereferencing operatori (*)
Bilvosita operator (yoki dereference operatori) () ko'rsatgichda ishlaydi va ko'rsatgich o'zgaruvchisida saqlanadigan manzilda saqlangan qiymatni qaytaradi. Masalan, agar yordamida "ko'rsatuvchi" qaytaruvchi ko'rsatkich bo'lsa . *pNumberint*pNumberintpNumber Misol uchun int number = 88; int * pNumber = &number; // Declare and assign the address of variable number to pointer pNumber (0x22ccec) cout << pNumber<< endl; // Print the content of the pointer variable, which contain an address (0x22ccec) cout << *pNumber << endl; // Print the value "pointed to" by the pointer, which is an int (88) *pNumber = 99; // Assign a value to where the pointer is pointed to, NOT to the pointer variable cout << *pNumber << endl; // Print the new value "pointed to" by the pointer (99) cout << number << endl; // The value of variable number changes as well (99) E'tibor bering, unda xotira manzilining joylashuvi saqlanadi, holbuki, u ko'rsatgich o'zgaruvchisida saqlanayotgan manzilda saqlanayotgan qiymatni yoki ko'rsatgich ko'rsatilgan qiymatni anglatadi. pNumber*pNumber Figurada ko'rsatilganidek, biror o'zgaruvchi (masalan, ) to'g'ridan-to'g'ri qiymatni anglatadi, ko'rsatgich esa bilvosita o'zi saqlaydigan xotira adresi orqali qiymatni anglatadi. Ko'rsatgich orqali biror qiymatga bilvosita referat bilvosita yoki dereferenced deyiladi. raqam Bilvosita operator () ham RHS () va ham LHS () tayinlash operatorlarida qo'llaniladi. * temp = *pNumber*pNumber = 99 E'tibor bering, bu simvol deklarant gapida va ifodada boshqacha ma'noga ega. U deklarantda qo'llanilganda (masalan, ), keyingi nom ko'rsatgich o'zgaruvchisi degan ma'noni anglatadi. Holbuki, u biror ifodada qo'llanilganda (masalan, ), ko'rsatgich o'zgaruvchisi tomonidan ko'rsatilgan qiymatni anglatadi. * int * pNumber*pNumber = 99; temp << *pNumber; Ko'rsatkich ham turiga ega Ko'rsatgich e'lon qilishda ko'rsatilgan turi (u ko'rsatadigan qiymat) bilan bog'liq. Ko'rsatgichda faqat e'lon qilingan turning manzili bo'lishi mumkin; Unda boshqa turdagi manzil bo'lishi mumkin emas. int i = 88; ikki d = 55,66; int * iPtr = &i; int qiymatini ko'rsatuvchi int ko'rsatgichi double * dPtr = &d; Ikkilik qiymatni ko'rsatuvchi ikki ko'rsatgich iPtr = &d; / XATO, har xil turdagi manzilni ushlab bo'lmaydi dPtr = &i; • XATO iPtr = i; / XATO, ko'rsatgich int manzilini ushlab turadi, NOT int qiymati int j = 99; iPtr = &j; / Ko'rsatgichda saqlangan manzilni o'zgartirish mumkin Namuna /* Test ko'rsatkich deklaratsiyasi va boshlang'ich (TestPointerInit.cpp) */ #include ism bo'shlig'i std yordamida; int main() { int soni = 88; – Int o'zgaruvchisini e'lon qilish va boshlang'ich qiymatni tayinlash int * pNumber; – Int (yoki int ko'rsatgich)ni ko'rsatuvchi ko'rsatgich o'zgaruvchisini e'lon qilish pNumber = & soni; / o'zgaruvchi raqamining manzilini ko'rsatgich pNumberga tayinlash cout << pNumber << endl; / PNumber (0x22ccf0) ning tarkibini chop etish cout << & soni << soni; / Sonning chop etish manzili (0x22ccf0) cout << *pNumber << endl; pNumber tomonidan ko'rsatilgan qiymatni bosib chiqarish (88) cout << soni << soni; / Sonining chop etish qiymati (88) *pNumber = 99; pNumber tomonidan ko'rsatilgan qiymatni qayta tayinlash cout << pNumber << endl; / PNumber (0x22ccf0) ning tarkibini chop etish cout << & soni << soni; / Sonning chop etish manzili (0x22ccf0) cout << *pNumber << endl; pNumber tomonidan ko'rsatilgan qiymatni bosib chiqarish (99) cout << soni << soni; / Sonning bosma qiymati (99) Raqam qiymati ko'rsatgich orqali o'zgaradi cout << &pNumber << endl; / Ko'rsatgich o'zgaruvchisi pNumber manzilini bosib chiqarish (0x22ccec) } Izohlar: Siz oladigan manzillarning qiymatlari meniki bilan bir xil bo'lishi ehtimoldan xoli emas. OS dasturni belgilangan xotira joylariga emas, balki mavjud bo'sh xotira joylariga yuklaydi. Download 267.5 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling