Tablice statyczne i dynamiczne

Stronę tą wyświetlono już: 397 razy

Tablice umożliwiają przechowywanie danych tego samego typu jako jeden ciąg (łańcuch) danych. Rozróżnia się dwa typy tablic: statyczne - czyli takie, których rozmiaru podczas działania programu nie da się zmienić; oraz dynamiczne - czyli takie, którym pamięć jest przypisywana w trakcie działania programu.

Tablice statyczne

Deklarowanie tablic statycznych może wyglądać następująco:

Listing 1
  1. int array1[]={10,20,30,40,50}; // deklaracja z tablicy statycznej z jednoczesnym ustawieniem jej wartości
  2. int array2[5]; // deklaracja tablicy statycznej 5 elementowej
  3. for(int i = 0; i < 5; i ++){ // w pętli od 0 do 4
  4. array2[i] = i * 10 + 10; // ustawiam kolejne wartości tablicy statycznej array2 względem indeksu i
  5. }

Warto zwrócić uwagę na to, że indeksowanie tablic zaczyna się od 0.

Ciągi znaków również można deklarować w ten sam sposób (ponieważ są one również tablicami):

Listing 2
  1. char str[]="jakiś tekst";

Tablice dynamiczne

Zaletą tablic statycznych jest łatwość ich użycia, natomiast wielką wadą jest brak możliwości sterowania ich rozmiarem, z tego też względu potrzebne są narzędzia umożliwiające dynamiczne deklarowanie tablic. W C++ narzędziem takim jest operator new, który przypisuje do zmiennej wskaźnikowej blok pamięci o określonych rozmiarach. Z kolei operator delete i delete[] umożliwia zwalnianie tejże pamięci.

Listing 3
  1. cout<<"Podaj rozmiar tablicy:";
  2. int arraySize = 0;
  3. cin>>arraySize; // wczytywanie rozmiaru tablicy
  4. int *array = 0; // wskaźnik tablicy dynamicznej
  5. if(arraySize > 0 && arraySize < 100){
  6. array = new int[arraySize]; // deklarowanie pamięci
  7. for(int i = 0; i < arraySize; i++){ // w pętli
  8. array[i] = i + 1; // wpisuję kolejne numery do tablicy
  9. cour<<"array["<<i<<"]="<<array[i]<<"n"; // wypisywanie tablicy na ekranie
  10. }
  11. delete[] array; // zwalnianie przypisanej pamięci
  12. array = 0; // dzięki temu przypisaniu będzie można stwierdzić, że pamięć tej zmiennej została zwolniona
  13. }

Komentarze