Tablice statyczne

1. Definicja

Tablica statyczna w C++ to ciąg elementów tego samego typu, umieszczonych w pamięci jeden po drugim, do których odwołujemy się za pomocą indeksu. Słowo statyczna oznacza tutaj, że rozmiar tablicy jest znany i ustalony w momencie kompilacji – nie można go zmienić podczas działania programu.


2. Deklaracja i inicjalizacja

Deklaracja:

  • typ – typ danych elementów (np. int, double, char).
  • rozmiar – liczba elementów tablicy (musi być stałą całkowitą znaną w czasie kompilacji).

Przykłady:

Inicjalizacja:


3. Dostęp do elementów

  • Indeksowanie rozpoczyna się od 0.
  • Składnia:

Przykład:

Uwaga: brak kontroli zakresu – dostęp poza rozmiarem tablicy (tab[10] przy tablicy 5-elementowej) prowadzi do niezdefiniowanego zachowania.


4. Właściwości tablic statycznych

  • Rozmiar stały – ustalany w czasie kompilacji.
  • Są umieszczane w pamięci ciągłej – wszystkie elementy znajdują się obok siebie.
  • Nazwą tablicy można posługiwać się jak wskaźnikiem na pierwszy element (tab&tab[0]).
  • Brak wbudowanej kontroli granic – programista musi sam pilnować poprawnego indeksowania.
  • Tablica nie może być kopiowana przypisaniem (tab1 = tab2; jest błędem).

5. Iteracja po tablicy

Pętla for:

Pętla range-based for (C++11+):


6. Tablice wielowymiarowe

Tablice statyczne mogą być wielowymiarowe, np. macierze.

Deklaracja:

Przykład:


7. Ograniczenia tablic statycznych

  • Rozmiar musi być znany w czasie kompilacji (stała liczba).
  • Brak możliwości zmiany rozmiaru w trakcie działania programu.
  • Brak metod ułatwiających zarządzanie (np. dodawania elementów).
  • Trudniejsze przekazywanie do funkcji – trzeba podawać rozmiar.

8. Tablice statyczne a inne struktury

  • Tablice dynamiczne (new[], delete[]) – rozmiar określany w czasie działania programu.
  • Kontenery STL (std::vector, std::array) – nowocześniejsze, bezpieczniejsze i bardziej elastyczne.

    • std::array<T, N> – alternatywa dla tablic statycznych, oferuje m.in. znajomość rozmiaru i metody (np. .size()).
    • std::vector<T> – elastyczny kontener dynamiczny.

9. Przekazywanie tablic do funkcji

W rzeczywistości funkcja otrzymuje wskaźnik do pierwszego elementu.