Przekazywanie argumentów przez wskaźnik w C++

Słownik kwalifikacji INF.04 - Projektowanie, programowanie i testowanie aplikacji

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 adresy
  • zamien(*a, *b) – to miałoby sens tylko przy wskaźnikach, a w zadaniu a i b są zmiennymi całkowitymi
  • zamien(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 na int
  • &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 &.