Mustaqil ish Mavzu: С/С++ дастурлаш тилида кўрсаткичлар билан боғлиқ муаммолар. Dasturiy vositalar xavfsizligi


сhar a; // char туридаги ўзгарувчи эълони. сhar *p=new char; // Кўрсаткични эълон


Download 348.42 Kb.
bet6/9
Sana21.04.2023
Hajmi348.42 Kb.
#1374143
TuriПрограмма
1   2   3   4   5   6   7   8   9
Bog'liq
mustaqil-ish

с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(<массив элементининг тури>) катталикка ўзгаради.
Масалан:

Download 348.42 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling