Po dokonaniu skojarzenia, wszelkie operacje wykonywane na parametrze dotyczÄ… lokalnej zmiennej
zainicjowanej argumentem, ale operacje wykonywane za po średnictwem parametru (np. * par, par[ i] albo par-> f) dotyczą zmiennej wskazywanej przez argument. Moż e to mieć wpływ na wartość argumentu.
#include <iostream.h>
int main(void)
{
void inc(int *ptr);
int fix = 10;
cout << fix << endl; // 10
inc(&fix);
cout << fix << endl; // 11
return 0;
}
void inc(int *ptr)
{
++*ptr;
}
35
Program potwierdza, że wykonanie operacji za poś rednictwem parametru wskaźnikowego może powodować
zmianÄ™ wartoÅ› ci zmiennej wskazywanej przez skojarzony z nim argument.
Parametry tablicowe
Każ dy parametr tablicowy jest niejawnie zastępowany parametrem wskaźnikowym, któ ry powstaje po
zastÄ… pieniu deklaratora vec[i] deklaratorem (* const vec).
W szczegó lności funkcja
int sum(int tab[20])
{
int sum = 0;
for(int i = 0; i < 3 ; i++)
sum += tab[i];
return sum;
}
jest niejawnie przekształcana w funkcję
int sum(int *const tab)
{
int sum = 0;
for(int i = 0; i < 3 ; i++)
sum += tab[i];
return sum;
}
Powoduje to, ż e jeśli chce się zdefiniować funkcję do sumowania tablic, nie odwołują cą się do zmiennych
globalnych, to jeden z jej argumentó w musi określać liczbę elementó w tablicy.
#include <iostream.h>
int sum(int tab[], int count)
{
int sum = 0;
for(int i = 0; i < count ; i++)
sum += tab[i];
return sum;
}
int main(void)
{
int small[] = { 10 },
large[] = { 10, 20, 30 };
cout << sum(small, 1) << endl;
cout << sum(large, 3) << endl;
return 0;
}
Parametry odnośnikowe
Z parametrem odnośnikowym moż na skojarzyć argument, któ ry jest takiego samego typu jak parametr, albo
któ ry moż na poddać niejawnej konwersji do typu parametru.
Zainicjowanie parametru polega na skopiowania odnośnika. Podobnie jak dla parametru wskaźnikowego, nie
pociÄ… ga to za sobÄ… kopiowania zmiennej identyfikowanej przez argument.
Po dokonaniu skojarzenia, wszelkie operacje wykonywane na parametrze dotyczÄ… zmiennej identyfikowanej
przez argument. Moż e to powodować zmianę wartości skojarzonego z nim argumentu.
36
#include <iostream.h>
int main(void)
{
void inc(int &ref);
int fix = 10;
cout << fix << endl; // 10
inc(fix);
cout << fix << endl; // 11
return 0;
}
void inc(int &ref)
{
++ref;
}
Program potwierdza, że wykonanie operacji za poś rednictwem parametru odnoś nikowego może powodować
zmianÄ™ wartoÅ› ci skojarzonego z nim argumentu.
Parametry funkcji main
Funkcja głó wna moż e być zadeklarowana jako bezparametrowa albo dwu-parametrowa. Jeśli jest
dwuparametrowa, to jej pierwszy parametr jest typu int i ma wartość ró wną liczbie argumentó w programu
zwiększonej o 1, a drugi jest typu char *[] i jest tablicą odnośnikó w do łańcuchó w zainicjowanych nazwą
programu oraz nazwami jego argumentó w.
#include <iostream.h>
int main(int argc, char *argv[])
{
cout << "My name is: " << argv[0] << endl;
cout << "My arguments are: " << endl;
for(int i = 1; i < argc ; i++)
cout << argv[i] << endl;
return 0;
}
Program wyprowadza swoją nazwę i argumenty; każde w osobnym wierszu.
Skojarzenia powrotne
W chwili zakończenia wykonywania funkcji rezultatowej (o typie ró ż nym od void) następuje skojarzenie jej
rezultatu z wyraż eniem występują cym w instrukcji powrotu. Odbywa się to według tych samych zasad co
skojarzenie parametru z argumentem i polega na zainicjowaniu rezultatu funkcji wyraż eniem występują cym w
instrukcji powrotu.
Uwaga: Rezultat funkcji jest zmiennÄ… . Typ rezultatu jest identyczny z typem funkcji. NazwÄ… rezultatu jest
wywołanie funkcji. Z punktu widzenia łą czenia operacji (np. ++*fun(1,2)+3), nazwa funkcji jest zastępowana
nazwÄ… rezultatu.
#include <iostream.h>
|