Na czym polega przekazywanie argumentów przez wskaźnik?
W C++ funkcja może przyjmować adresy zmiennych zamiast ich zwykłych wartości. Wtedy parametr ma typ wskaźnikowy, np. int *a. Dzięki temu funkcja może zmienić wartość zmiennej przekazanej z zewnątrz.
To właśnie dzieje się w funkcji:
void zamien(int *a, int *b) {
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
Parametry a i b są wskaźnikami na zmienne typu int. Operator * oznacza odczyt lub zapis wartości znajdującej się pod danym adresem.
Jak wywołać taką funkcję?
Jeśli mamy zwykłe zmienne:
int a = 12;
int b = 34;
to do funkcji trzeba przekazać ich adresy:
zamien(&a, &b);
Operator & zwraca adres zmiennej. To poprawne wywołanie, bo funkcja oczekuje int*, a nie int.
Dlaczego inne wywołania są błędne?
zamien(12, 34)– przekazywane są liczby, a nie adresyzamien(*a, *b)– to miałoby sens tylko przy wskaźnikach, a w zadaniuaibsą zmiennymi całkowitymizamien(m, n)– przekazywane są wartości zmiennych, nie ich adresy
Kiedy stosuje się taki sposób przekazywania?
- gdy funkcja ma zmienić wartości argumentów,
- gdy chcemy operować bezpośrednio na danych poza funkcją,
- w zadaniach związanych z tablicami i dynamiczną pamięcią.
Najważniejsze do zapamiętania
int *x– wskaźnik naint&zmienna– adres zmiennej*wskaznik– wartość pod adresem- funkcja z parametrami wskaźnikowymi wymaga przekazania adresów
W zadaniach egzaminacyjnych warto najpierw sprawdzić typ parametrów funkcji. Jeśli widzisz * przy parametrze, zwykle przy wywołaniu trzeba użyć operatora &.