сhar a; // char туридаги ўзгарувчи эълони. сhar *p=new char; // Кўрсаткични эълон қилиб,унга
// динамик хотирадан ажратилган
// хотиранинг адресини бериш
*p=’b’; // p адресига қиймат жойлаштириш
a=*p; // a ўзгарувчисига p адресидаги қийматни бериш
Шуни қайд қилиб ўтиш керакки, хотиранинг аниқ бир жойидаги адресни бир пайтнинг ўзида бир нечта ва ҳар хил турдаги кўрсаткич- ларга бериш мумкин ва улар орқали мурожаат қилинганда берилган- нинг ҳар хил турдаги қийматларини олиш мумкин:
unsigned long int A=0Xcc77ffaa;
unsigned short int * pint=(unsigned short int*)&A; unsigned char* pchar=(unsigned char*)&A; cout<
Экранга ҳар хил қийматлар чоп этилади:
cc77ffaa ffaa aa
Ўзгарувчилар битта адресда жойлашган ҳолда яхлит қийматнинг турли бўлакларини ўзлаштиради. Бунда, бир байтдан катта жой эгал- лаган сон қийматининг хотирада «тескари» жойлашиши инобатга олиниши керак.
Агар ҳар хил турдаги кўрсаткичларга қийматлар берилса, албат- та турга келтириш амалидан фойдаланиш керак:
int n=5; float x=1.0; int *pi=&n;
float *px=&x; void *p;
int *r,*r1; px=(float *)&n; p=px;
r=(int *)p; r1=pi;
Кўрсаткич турини void турига келтириш амалда маънога эга эмас. Худди шундай, турлари бир хил бўлган кўрсаткичлар учун турни келтириш амалини бажаришга ҳожат йўқ.
Кўрсаткич устидан бажариладиган арифметик амалларда авто- матик равишда турларнинг ўлчами ҳисобга олинади.
Арифметик амаллар фақат бир хил турдаги кўрсаткичлар устидан бажарилади ва улар асосан, массив тузилмаларига кўрсаткич- лар устида бажарилади.
Инкремент амали кўрсаткични массивнинг кейинги элементига, декремент эса аксинча, битта олдинги элементининг адресига кўчиради. Бунда кўрсаткичнинг қиймати sizeof(<массив элементи- нинг тури>) қийматига ўзгаради. Агар кўрсаткич k ўзгармас қийматга оширилса ёки камайтирилса, унинг қиймати k*sizeof(<массив элементининг тури>) катталикка ўзгаради.
Масалан:
Do'stlaringiz bilan baham: |