Wskaźniki

Wskaźniki bez wątpienia są niezwykle ważnym elementem C++. Umożliwiają wykonywanie operacji bezpośrednio na wybranych obiektach w pamięci komputera np. na innych zmiennych, lub funkcjach. Tak więc, wskaźnikiem możemy nazwać zmienną która wskazuje na konkretny adres innego obiektu w pamięci. Najprostsza deklaracja wskaźnika wygląda następująco :

int *xptr =  &x;

W ten sposób za pomocą tak zwanego operatora wyłuskiwania ‘*’ tworzymy zmienną wskaźnikową, której następnie używając operatora ‘&’ przypisujemy adres zmiennej x.

Aby zrozumieć powyższą definicje porównajmy dwie grupy instrukcji:

int x=40, y;
y = x;


oraz

int x= 40, y, *xptr;
xptr = &x;
y = *xptr;


W pierwszym bloku dokonujemy prostego przypisania zmiennej y wartości zmiennej x. Natomiast w drugim deklarujemy dodatkowo zmienną wskaźnikową xptr, której przypisujemy adres zmiennej x. Następnie zmiennej y przypisujemy wartość, na którą wskazuje wskaźnik xptr. Po wykonaniu dwóch powyższych grup instrukcji, zmienna y będzie posiadała taką samą wartość. W związku z tym ktoś mógłby zapytać, w jakim celu powinniśmy stosować wskaźniki? W tym wypadku faktycznie nie miałoby to sensu. Jednak wskaźniki posiadają jeszcze jedną ważną cechę. Ponieważ odwołują się do konkretnego obiektu w pamięci jego każda modyfikacja wpływa na wartość wskaźnika. Wykonajmy np. następujący kod:

#include <iostream.h>
#include <conio.h>
 
int main()
{
  int x, y, *xptr;
 
  x = 40;
  xptr = &x;
 
  x = 50;
  y = *xptr;
 
  cout << y;
 
  system("pause>null");
  return 0;
}

Po dołączeniu potrzebnych bibliotek i zadeklarowaniu zmiennych, z których będziemy korzystać, zmiennej x przypisujemy wartość 40. Następnie zmiennej wskaźnikowej przypisujemy adres zmiennej x. Teraz jednak przed przypisaniem zmiennej y wartości na którą wskazuje zmienna wskaźnikowa zmieniamy wartość zmiennej x na 50. Gdy uruchomimy program zostanie wypisana wartość 50, a nie 40. Powyższy przykład ilustruje dobrze fakt, iż wskaźnik odnosi się do konkretnego obszaru pamięci i każda jego modyfikacja wpływa na wartość wskaźnika.

Wskaźniki działają również w odwrotną stronę, każda modyfikacja wskaźnika wpływa na wartość zmiennej na którą wskazuje. Aby to zobrazować wykonajmy następujący program:

#include <iostream.h>
#include <conio.h>
 
int main()
{
  int x, y, *xptr;
 
  x = 40;
  xptr = &x;
  *xptr = 50;
 
  cout << x;
 
  system("pause>null");
  return 0;
}

Podczas działania programu zmiennej wskaźnikowej przypisujemy wartość 50. Ponieważ wskaźnik odwołuje się do obszaru pamięci zmiennej x, zmienna ta przybiera również wartość 50, o czym można się przekonać uruchamiając program.
Jeżeli mimo zrozumienia działania wskaźników wciąż nie wiesz, do czego mogą się one przydać, nie powinieneś się przejmować, w pewnym momencie odczujesz potrzebę skorzystania z ich zalet. Wskaźniki bardzo często wykorzystuje się do przekazywania obiektów jako parametry funkcji, aby były one widoczne w jej wnętrzu.

 

Projekt © 2009 - INFOPROG 67905 odwiedzin