Задача этой книги дать краткое и четкое изложение языка С++ в соответствии со стандар том iso/iec 14882. Она предназначена для студентов, изучающих язык «с нуля»



Download 2 Mb.
bet34/232
Sana29.03.2022
Hajmi2 Mb.
#516205
TuriЗадача
1   ...   30   31   32   33   34   35   36   37   ...   232
Bog'liq
Т. А. Павловская C C . Программирование на языке высокого уровня

ВНИМАНИЕ
Åñëè ïåðåìåííaя-óêaçaòåëü âûõîäèò èç îáëañòè ñâîåãî äåéñòâèя, îòâåäåííaя ïîä íåå ïa- ìяòü îñâîáîæäaåòñя. Cëåäîâaòåëüíî, äèíaìè÷åñêaя ïåðåìåííaя, ía êîòîðóþ ññûëaëñя óêa- çaòåëü, ñòaíîâèòñя íåäîñòóïíîé. Ïðè ýòîì ïaìяòü èç-ïîä ñaìîé äèíaìè÷åñêîé ïåðåìåííîé íå îñâîáîæäaåòñя. Äðóãîé ñëó÷aé ïîяâëåíèя «ìóñîða» — êîãäa èíèöèaëèçèðîâaííîìó óêaçaòåëþ ïðèñâaèâaåòñя çía÷åíèå äðóãîãî óêaçaòåëя. Ïðè ýòîì ñòaðîå çía÷åíèå áåññëåä- íî òåðяåòñя.

C ïîìîùüþ êîìáèíaöèé çâåçäî÷åê, êðóãëûõ è êâaäðaòíûõ ñêîáîê ìîæíî îïèñû- âaòü ñîñòaâíûå òèïû è óêaçaòåëè ía ñîñòaâíûå òèïû, íaïðèìåð, â îïåðaòîðå


int *(*p[10])();
îáúяâëяåòñя ìaññèâ èç 10 óêaçaòåëåé ía ôóíêöèè áåç ïaðaìåòðîâ, âîçâðaùaþùèõ óêaçaòåëè ía int.
Ïî óìîë÷aíèþ êâaäðaòíûå è êðóãëûå ñêîáêè èìåþò îäèíaêîâûé ïðèîðèòåò, áîëüøèé, ÷åì çâåçäî÷êa, è ðaññìaòðèâaþòñя ñëåâa íaïðaâî. Äëя èçìåíåíèя ïî- ðяäêa ðaññìîòðåíèя èñïîëüçóþòñя êðóãëûå ñêîáêè.
Ïðè èíòåðïðåòaöèè ñëîæíûõ îïèñaíèé íåîáõîäèìî ïðèäåðæèâaòüñя ïðaâèëa
«èçíóòðè íaðóæó»:

  1. åñëè ñïðaâa îò èìåíè èìåþòñя êâaäðaòíûå ñêîáêè, ýòî ìaññèâ, åñëè ñêîáêè êðóãëûå — ýòî ôóíêöèя;

  2. åñëè ñëåâa åñòü çâåçäî÷êa, ýòî óêaçaòåëü ía ïðîèíòåðïðåòèðîâaííóþ ðaíåå êîíñòðóêöèþ;

  3. åñëè ñïðaâa âñòðå÷aåòñя çaêðûâaþùaя êðóãëaя ñêîáêa, íåîáõîäèìî ïðèìå- íèòü ïðèâåäåííûå âûøå ïðaâèëa âíóòðè ñêîáîê, a çaòåì ïåðåõîäèòü íaðóæó;

  4. â ïîñëåäíþþ î÷åðåäü èíòåðïðåòèðóåòñя ñïåöèôèêaòîð òèïa.

Äëя ïðèâåäåííîãî âûøå îïèñaíèя ïîðяäîê èíòåðïðåòaöèè óêaçaí öèôðaìè:
int *(*p[10])();
5 4 2 1 3 // ïîðяäîê èíòåðïðåòaöèè îïèñaíèя

Операции с указателями


C óêaçaòåëяìè ìîæíî âûïîëíяòü ñëåäóþùèå îïåðaöèè: ðaçaäðåñaöèя, èëè êîñ- âåííîå îáðaùåíèå ê îáúåêòó (*), ïðèñâaèâaíèå, ñëîæåíèå ñ êîíñòaíòîé, âû÷èòa- íèå, èíêðåìåíò (++), äåêðåìåíò (––), ñðaâíåíèå, ïðèâåäåíèå òèïîâ. Ïðè ðaáîòå ñ óêaçaòåëяìè ÷añòî èñïîëüçóåòñя îïåðaöèя ïîëó÷åíèя aäðåña (&).

Îïåðaöèя ðaçaäðåñaöèè, èëè ðaçûìåíîâaíèя, ïðåäíaçía÷åía äëя äîñòóïa ê âåëè-


÷èíå, aäðåñ êîòîðîé õðaíèòñя â óêaçaòåëå. Ýòó îïåðaöèþ ìîæíî èñïîëüçîâaòü êaê äëя ïîëó÷åíèя, òaê è äëя èçìåíåíèя çía÷åíèя âåëè÷èíû (åñëè îía íå îáúяâ- ëåía êaê êîíñòaíòa):
Char a; // ïåðåìåííaя òèïa Char
Char*p= new Char; /* âûäåëåíèå ïaìяòè ïîä óêaçaòåëü è ïîä äèíaìè÷åñêóþ ïåðåìåííóþ òèïa Char */
*p = 'Þ'; a = *p; // ïðèñâaèâaíèå çía÷åíèя îáåèì ïåðåìåííûì
Êaê âèäíî èç ïðèìåða, êîíñòðóêöèþ *èìя_óêaçaòåëя ìîæíî èñïîëüçîâaòü â ëåâîé
÷añòè îïåðaòîða ïðèñâaèâaíèя, òaê êaê îía яâëяåòñя L-çía÷åíèåì (ñì. ñ. 33), òî åñòü îïðåäåëяåò aäðåñ îáëañòè ïaìяòè. Äëя ïðîñòîòû ýòó êîíñòðóêöèþ ìîæíî ñ÷èòaòü èìåíåì ïåðåìåííîé, ía êîòîðóþ ññûëaåòñя óêaçaòåëü. C íåé äîïóñòèìû âñå äåéñòâèя, îïðåäåëåííûå äëя âåëè÷èí ñîîòâåòñòâóþùåãî òèïa (åñëè óêaçaòåëü èíèöèaëèçèðîâaí). Ía îäíó è òó æå îáëañòü ïaìяòè ìîæåò ññûëaòüñя íåñêîëüêî óêaçaòåëåé ðaçëè÷íîãî òèïa. Ïðèìåíåííaя ê íèì îïåðaöèя ðaçaäðåñaöèè äañò ðaçíûå ðåçóëüòaòû. Íaïðèìåð, ïðîãðaììa
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;
}
ía IBM PC âûâåäåò ía ýêðaí ñòðîêó1:
| CC77ffaa | ffaa | aa |
Çía÷åíèя óêaçaòåëåé pint è pChar îäèíaêîâû, íî ðaçaäðåñaöèя pChar äaåò â ðåçóëü- òaòå îäèí ìëaäøèé áaéò ïî ýòîìó aäðåñó, a pint — äâa ìëaäøèõ áaéòa.
 ïðèâåäåííîì âûøå ïðèìåðå ïðè èíèöèaëèçaöèè óêaçaòåëåé áûëè èñïîëüçîâa- íû îïåðaöèè ïðèâåäåíèя òèïîâ. Cèíòaêñèñ îïåðaöèè яâíîãî ïðèâåäåíèя òèïa ïðîñò: ïåðåä èìåíåì ïåðåìåííîé â ñêîáêaõ óêaçûâaåòñя òèï, ê êîòîðîìó åå òðåáó- åòñя ïðåîáðaçîâaòü. Ïðè ýòîì íå ãaðaíòèðóåòñя ñîõðaíåíèå èíôîðìaöèè, ïîýòî- ìó â îáùåì ñëó÷aå яâíûõ ïðåîáðaçîâaíèé òèïa ñëåäóåò èçáåãaòü. Ïîäðîáíåå îïå- ðaöèя ïðèâåäåíèя òèïîâ ðaññìîòðåía ía ñ. 231.
Ïðè ñìåøèâaíèè â âûðaæåíèè óêaçaòåëåé ðaçíûõ òèïîâ яâíîå ïðåîáðaçîâaíèå òèïîâ òðåáóåòñя äëя âñåõ óêaçaòåëåé, êðîìå vOid*. Óêaçaòåëü ìîæåò íåяâíî ïðå- îáðaçîâûâaòüñя â çía÷åíèå òèïa bOOl (íaïðèìåð, â âûðaæåíèè óñëîâíîãî îïåða- òîða), ïðè ýòîì íåíóëåâîé óêaçaòåëü ïðåîáðaçóåòñя â true, a íóëåâîé â false.
Ïðèñâaèâaíèå áåç яâíîãî ïðèâåäåíèя òèïîâ äîïóñêaåòñя â äâóõ ñëó÷aяõ:

  • óêaçaòåëяì òèïa vOid*;

  • åñëè òèï óêaçaòåëåé ñïðaâa è ñëåâa îò îïåðaöèè ïðèñâaèâaíèя îäèí è òîò æå.



1 Còaðûå âåðñèè êîìïèëяòîða ìîãóò âûäaòü â ðåçóëüòaòå ñòðîêó | ffaa | CC77 | ffaa |

Òaêèì îáðaçîì, íåяâíîå ïðåîáðaçîâaíèå âûïîëíяåòñя òîëüêî ê òèïó vOid*. Çía-


÷åíèå 0 íåяâíî ïðåîáðaçóåòñя ê óêaçaòåëþ ía ëþáîé òèï. Ïðèñâaèâaíèå óêaçaòå- ëåé ía îáúåêòû óêaçaòåëяì ía ôóíêöèè (è íaîáîðîò) íåäîïóñòèìî. Çaïðåùåíî è ïðèñâaèâaòü çía÷åíèя óêaçaòåëяì-êîíñòaíòaì, âïðî÷åì, êaê è êîíñòaíòaì ëþáî- ãî òèïa (ïðèñâaèâaòü çía÷åíèя óêaçaòåëяì ía êîíñòaíòó è ïåðåìåííûì, ía êîòî- ðûå ññûëaåòñя óêaçaòåëü-êîíñòaíòa, äîïóñêaåòñя).

Download 2 Mb.

Do'stlaringiz bilan baham:
1   ...   30   31   32   33   34   35   36   37   ...   232




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish