Przekazywanie parametrów przez zmienną
Przekazanie argumentów przez wskaźnik polega na przekazaniu do funkcji kopii wskaźnika do zmiennej (jest to więc przekazanie przez wartość wskaźnika). Dzięki przekazaniu zmiennej przez wskaźnik, mamy możliwość zmiany wartości przekazanej zmiennej wewnątrz funkcji.
Przykład:
#include <iostream.h>
#include <stdlib.h>
/* za pomocą operatora "*" informujemy kompilator o tym, że argumentem funkcji będzie wskaźnik. Wewnątrz funkcji też musimy pamiętać, że wartości "a" i "b" to wskaźniki, więc znów trzeba używać operatora "*" */
int Add(int *a, int *b)
{
int wynik=*a+*b;
*a=*b=0;
return wynik;
}
int main()
{
int x=1,y=2,z;
/*aby przekazać do funkcji adres zmiennej trzeba użyć operatora pobrania adresu "&"*/
z=Add(&x,&y);
cout << "Wynik = " << z << endl;
cout << "a = " << x << endl;
cout << "b = " << y << endl;
system("PAUSE");
return 0;
}
W tym przypadku wynik działania programu będzie następujący:
Wynik = 3
a=0
b=0
Dzieje się tak dlatego, że operacje wewnątrz funkcji (zerowanie zmiennych) przeprowadzane na podstawie adresów zmiennych "x" i "y", a więc nie na kopiach tych zmiennych (tak jak miało to miejsce w przypadku przekazania parametrów przez wartość), tylko na oryginalnych zmiennych "x" i "y".
Przekazywanie parametrów przez wartość
W wyniku przekazania przez wartość funkcja otrzymuje kopię zmiennej. Przekazany w ten sposób parametr traktowany jest jak zmienna lokalna funkcji, co oznacza, że istnieje wyłącznie podczas jej wykonania i jest niszczona przy wyjściu z funkcji.
Przykład:
#include <iostream.h>
#include <stdlib.h>
int Add(int a, int b)
{
int wynik=a+b;
a=b=0; //wartości zmiennych wewnątrz funkcji są zerowane
return wynik;
}
int main()
{
int x=1,y=2,z;
z=Add(x,y);
cout << "Wynik = " << z << endl;
cout << "a = " << x << endl; // wypisanie zmiennych które wewnątrz
cout << "b = " << y << endl; // funkcji zostały "wyzerowane"
system("PAUSE");
return 0;
}
Wynik działania programu:
Wynik = 3
a = 1
b = 2
Widać, iż pomimo "wyzerowania" zmiennych a i b wewnątrz funkcji Add, wartości zmiennych przekazanych do tej funkcji (x,y) nie zostają zmienione. Dzieje się tak dlatego, że w przekazaniu parametrów przez wartość, do funkcji przekazywane są kopie zmiennych, a nie same zmienne.