Tablice i wskaźniki

1. Podstawowa zależność

  • Nazwa tablicy w C++ reprezentuje wskaźnik na jej pierwszy element.
  • Można więc używać wskaźników do pracy z tablicami zamiast klasycznego indeksowania.

Przykład:


2. Indeksowanie a wskaźniki

Każdy element tablicy można odczytać na dwa sposoby:

Przykład:

Mechanizm: tab wskazuje na tab[0]. Dodanie i przesuwa wskaźnik o i elementów (uwzględniając rozmiar typu).


3. Arytmetyka wskaźników na tablice

Wskaźnik można przesuwać o kolejne elementy tablicy:

Ważne: przesuwanie wskaźnika poza zakres tablicy prowadzi do niezdefiniowanego zachowania.


4. Tablice jako argumenty funkcji

Kiedy przekazujemy tablicę do funkcji, w rzeczywistości przekazujemy wskaźnik do jej pierwszego elementu.

Forma 1 – jawny wskaźnik:

Forma 2 – składnia tablicowa (równoważna):

Oba zapisy są równoważne – funkcja dostaje wskaźnik.


5. Tablice wielowymiarowe a wskaźniki

Tablica 2D to tablica tablic.

Przykład:

Dostęp wskaźnikowy:

  • *(*(macierz+1)+2)macierz[1][2]6

Schemat myślowy:

  • macierz → wskaźnik do wiersza 0 (int[3])
  • *(macierz+1) → wskaźnik do wiersza 1
  • *(*(macierz+1)+2) → element wiersza 1, kolumna 2

6. Tablice dynamiczne i wskaźniki

Tablice dynamiczne można utworzyć za pomocą wskaźnika i operatora new[].

Zalety:

  • elastyczny rozmiar (określany w runtime). Wady:
  • ręczne zarządzanie pamięcią (łatwo o wyciek).

7. Wskaźnik do tablicy a wskaźnik na element

Warto rozróżniać:

  • int *p – wskaźnik na pojedynczy element typu int (np. p = &tab[0]).
  • int (*p)[10] – wskaźnik na tablicę 10-elementową typu int.

Przykład:


8. Różnice między tablicą a wskaźnikiem

Cecha Tablica Wskaźnik
Deklaracja int tab[5]; int *p;
Rozmiar stały, znany w kompilacji dynamiczny (można używać new)
Zawartość przechowuje elementy przechowuje adres
Przypisanie tab = inna_tab; – błąd p = inny_adres; – OK
Funkcje przekazywana jako wskaźnik naturalnie przekazuje adres

9. Typowe błędy

  • Przekroczenie zakresu tablicy:
  • Użycie niezainicjalizowanego wskaźnika:
  • Brak delete[] przy tablicach dynamicznych.