logo

Wskaźniki i referencje


Wskaźnik przechowuje adres do miejsca w pamięci RAM, aby dotrzeć do danych, wskazywanych należy wyłuskać wskaźnik.

	int * wskN;  //definicja wskaźnika na int, wskaźnik nie wskazuje na żadne dane
	
	int i = 4;
	int wskI = &i;  //definicja wskaźnika na int połączona z inicjalizacją
	*wskI += 2;   // wyłuskanie wkźnika
	cout << i << endl;  // drukuje 6

Referencja jest rodzajem stałego wskaźnika (przechowuje niezmienny adres), którego definicja musi być połączona z inicjalizacją. Referencje używa się łatwiej niż wskaźniki. Referencja stanowi alternatywną nazwę zmiennej. Czyli jedna zmienna może mieć wiele alternatywnych nazw.

	int & refN;  //definicja referencji int, błąd!! brak inicjalizacji 
	
	int i = 4;
	int & refI = i;  //definicja referencj  int połączona z inicjalizacją
	refI += 2;   // referencji używa się tak samo jak nazwę zwykłej zmiennej
	cout << i << endl;  // drukuje 6

Tablice. Arytmetyka wskaźników.

Wiele zmiennych tego samego typu ułożonych w pamięci jedna za drugą w sposób ciągły tworzą tablicę. Każda z tych zmiennych to elemant tablicy. Nazwa tablicy jest wskaźnikiem (adresem) na początek tablicy. Kolejne elementy dostępne są przez indeks. Indeks jest parzesunięciem od początku tablicy do określoego jej elementu.

	int a[20];  //definicja tablicy 20 elementowej 
	a[0] = 5; // odwołanie do pierwszego elementu tablicy! indeks = 0
	a[19] = -3; // odwołanie do ostatniego elementu tablicy! indeks = 19
	
	cout << a[5]; // odwołanie do 6 elementu tablicy! indeks = 5
	//Alternatywnie
	cout << *(a+5); // odwołanie  do 6 elementu tablicy! indeks = 5
	
	int * wskI = &a[5]; // wskI jest wskaźnikiem do 6 elementu tablicy
	*(wskI+1) = -12; // odwołanie  do 7 elementu tablicy! indeks = 6
	
	int & refI = a[5]; // refI jest alternatywną nazwą 6 elementu
	refI = 67;
	cout << a[5]; // drukuje 67
	

Więcej można znaleźć na stronach:

  1. http://pl.wikibooks.org/wiki/C/Wska%C5%BAniki
  2. http://pl.wikibooks.org/wiki/C%2B%2B/Referencje
  3. http://icis.pcz.pl/~roman/mat_dyd/prog/c.html
  4. http://kondel.ko.funpic.de/?pid=24
  5. http://www.antylameriada.net/pwskazniki/
  6. http://guidecpp.cal.pl/cplus,pointers
  7. http://darkcult.gamedev.pl/kursy/kurs03.html

logo