Ãëîáaëüíûå ïåðåìåííûå âèäíû âî âñåõ ôóíêöèяõ, ãäå íå îïèñaíû ëîêaëüíûå ïå- ðåìåííûå ñ òåìè æå èìåíaìè, ïîýòîìó èñïîëüçîâaòü èõ äëя ïåðåäa÷è äaííûõ ìåæäó ôóíêöèяìè î÷åíü ëåãêî. Òåì íå ìåíåå ýòî íå ðåêîìåíäóåòñя, ïîñêîëüêó çaòðóäíяåò îòëaäêó ïðîãðaììû è ïðåïяòñòâóåò ïîìåùåíèþ ôóíêöèé â áèáëèîòå- êè îáùåãî ïîëüçîâaíèя. Íóæíî ñòðåìèòüñя ê òîìó, ÷òîáû ôóíêöèè áûëè ìaêñè- ìaëüíî íåçaâèñèìû, a èõ èíòåðôåéñ ïîëíîñòüþ îïðåäåëяëñя ïðîòîòèïîì ôóíê- öèè.
Возвращаемое значение
Ìåõaíèçì âîçâðaòa èç ôóíêöèè â âûçâaâøóþ åå ôóíêöèþ ðåaëèçóåòñя îïåða- òîðîì
return [ âûðaæåíèå ];
Ôóíêöèя ìîæåò ñîäåðæaòü íåñêîëüêî îïåðaòîðîâ return (ýòî îïðåäåëяåòñя ïî- òðåáíîñòяìè aëãîðèòìa). Åñëè ôóíêöèя îïèñaía êaê vOid, âûðaæåíèå íå óêaçûâa- åòñя. Îïåðaòîð return ìîæíî îïóñêaòü äëя ôóíêöèè òèïa vOid, åñëè âîçâðaò èç íåå ïðîèñõîäèò ïåðåä çaêðûâaþùåé ôèãóðíîé ñêîáêîé, è äëя ôóíêöèè main.  ýòîé êíèãå äëя ýêîíîìèè ìåñòa îïåðaòîð return â ôóíêöèè main íå óêaçaí, ïî- ýòîìó ïðè êîìïèëяöèè ïðèìåðîâ âûäaåòñя ïðåäóïðåæäåíèå. Âûðaæåíèå, óêaçaí- íîå ïîñëå return, íåяâíî ïðåîáðaçóåòñя ê òèïó âîçâðaùaåìîãî ôóíêöèåé çía÷å- íèя è ïåðåäaåòñя â òî÷êó âûçîâa ôóíêöèè.
Ïðèìåðû:
int f1(){return 1;} // ïðaâèëüíî
vOid f2(){return 1;} // íåïðaâèëüíî, f2 íå äîëæía âîçâðaùaòü çía÷åíèå dOuble f3{return 1;} // ïðaâèëüíî, 1 ïðåîáðaçóåòñя ê òèïó dOuble
ВНИМАНИЕ
Íåëüçя âîçâðaùaòü èç ôóíêöèè óêaçaòåëü ía ëîêaëüíóþ ïåðåìåííóþ, ïîñêîëüêó ïaìяòü, âûäåëåííaя ëîêaëüíûì ïåðåìåííûì ïðè âõîäå â ôóíêöèþ, îñâîáîæäaåòñя ïîñëå âîçâðaòa èç íåå.
Ïðèìåð:
int* f(){
inta= 5;
return &a; // íåëüçя!
}
Параметры функции
Ìåõaíèçì ïaðaìåòðîâ яâëяåòñя îñíîâíûì ñïîñîáîì îáìåía èíôîðìaöèåé ìåæäó âûçûâaåìîé è âûçûâaþùåé ôóíêöèяìè. Ïaðaìåòðû, ïåðå÷èñëåííûå â çaãîëîâêå îïèñaíèя ôóíêöèè, íaçûâaþòñя ôîðìaëüíûìè, a çaïèñaííûå â îïåðaòîðå âûçîâa ôóíêöèè — ôanòè÷åñnèìè.
Ïðè âûçîâå ôóíêöèè â ïåðâóþ î÷åðåäü âû÷èñëяþòñя âûð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÷åíèé ô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ìåòðîâ:
inClude
vOid f(int i, int* j, int& k); int main(){
inti= 1,j= 2,k= 3; COut <<"i j k\n";
COut << i <<' '<< j <<' '<< k <<'\n';
f(i, &j, k);
COut << i <<' '<< j <<' '<< k;
return 0;
}
vOid f(int i, int* j, int& k){ i++; (*j)++; k++;
}
Ðåçóëüòaò ðaáîòû ïðîãðaììû:
ijk 123
134
Ïåðâûé ïaðaìåòð (i) ïåðåäaåòñя ïî çía÷åíèþ. Åãî èçìåíåíèå â ôóíêöèè íå âëèяåò ía èñõîäíîå çía÷åíèå. Âòîðîé ïaðaìåòð (j) ïåðåäaåòñя ïî aäðåñó ñ ïî- ìîùüþ óêaçaòåëя, ïðè ýòîì äëя ïåðåäa÷è â ôóíêöèþ aäðåña ôaêòè÷åñêîãî ïaða- ìåòða èñïîëüçóåòñя îïåðaöèя âçяòèя aäðåña, a äëя ïîëó÷åíèя åãî çía÷åíèя â ôóíêöèè òðåáóåòñя îïåðaöèя ðaçûìåíîâaíèя. Òðåòèé ïaðaìåòð (k) ïåðåäaåòñя ïî aäðåñó ñ ïîìîùüþ ññûëêè.
Ïðè ïåðåäa÷å ïî ññûënå â ôóíêöèþ ïåðåä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òîð COnst:
int f(COnst Char*);
Char* t(Char* a, COnst int* b);
СОВЕТ
Ðåêîìåíäóåòñя óêaçûâaòü COnst ïåðåä âñåìè ïaðaìåòðaìè, èçìåíåíèå êîòîðûõ â ôóíêöèè íå ïðåäóñìîòðåíî. Ýòî îáëåã÷aåò îòëaäêó áîëüøèõ ïðîãðaìì, òaê êaê ïî çaãîëîâêó ôóíê- öèè ìîæíî ñäåëaòü âûâîä î òîì, êaêèå âåëè÷èíû â íåé èçìåíяþòñя, a êaêèå íåò. Êðîìå òîãî, ía ìåñòî ïaðaìåòða òèïa COnst& ìîæåò ïåðåä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÷åíèþ.
Do'stlaringiz bilan baham: |