Wskaźnik to zmienna przechowująca adres innej zmiennej w pamięci. W C++ wskaźniki są często używane do przekazywania danych do funkcji tak, aby funkcja mogła zmienić oryginalne wartości zmiennych.
Deklaracja wskaźnika
int *p;
Zmienna p jest wskaźnikiem na wartość typu int, czyli może przechowywać adres zmiennej całkowitej.
Operator adresu &
Operator & zwraca adres zmiennej:
int a = 10;
int *p = &a;
Oznacza to: wskaźnik p przechowuje adres zmiennej a.
Operator dereferencji *
Operator * pozwala dostać się do wartości znajdującej się pod adresem zapisanym we wskaźniku:
*p = 20;
Po tej instrukcji zmienna a ma wartość 20, ponieważ p wskazuje na a.
Przekazywanie wskaźników do funkcji
Jeżeli funkcja ma parametry typu int *, należy przekazać do niej adresy zmiennych:
void zamien(int *a, int *b) {
int tmp = *a;
*a = *b;
*b = tmp;
}
int x = 12;
int y = 34;
zamien(&x, &y);
Wywołanie zamien(&x, &y) jest poprawne, ponieważ &x i &y są adresami zmiennych typu int.
Częsty błąd
Niepoprawne jest wywołanie:
zamien(x, y);
jeśli funkcja oczekuje int *, ponieważ x i y są wartościami typu int, a nie adresami.