Tablice

Tablice to kolejna rzecz, która może uprzyjemnić programowanie. Tablica to zbiór określonej liczby obiektów powiązanych w pewien logiczny związek. Wszystkie takie obiekty muszą być tego samego rodzaju. Nie można w tablicy umieścić kilku różnych zmiennych. Zaczniemy od najprostszych tablic zawierających liczby. Oto przykład:

To jest właśnie nasza tablica. Wystarczyło dodać tylko dwie klamerki oraz liczbę elementów, aby osiągnąć cel. Zwróć uwagę, że tablica taka, podobnie, jak zmienne nowo definiowane zawiera śmieci. Jeśli tylko chcemy to możemy dokonać inicjalizacji tablicy razem z definicją. Robi się to w taki sposób:

Zauważ, że tablica jest sześcioelementowa. My podaliśmy jedynie cztery. W takiej sytuacji kompilator zakłada, że pozostałe dwa elementy mają zostać wyzerowane. Zatem zapis: int tablica[6] = {3,5,2,1}; jest jednoznaczny z: int tablica[6] = {3,5,2,1,0,0};. Idąc dalej tym tropem okaże się, że w prosty sposób możemy wyczyścić całą tablicę już przy definicji. Piszemy tak:

Tym sposobem mamy sześcioelementową tablicę zawierającą liczby typu int. Dodatkowo wszystkie te liczby posiadają wartość zero. Jeśli korzystamy z takiej formy inicjalizacji tablic to możemy całkowicie pominąć jej rozmiar. Konkretniej:

Spowoduje, że otrzymamy cztero elementową tablicę wypełnioną odpowiednimi wartościami. Zauważ, że jawnie nie podaliśmy rozmiaru naszej tablicy, a jedynie wartości poszczególnych jej elementów. Kompilator wówczas przyjmie, że tablica ma posiadać tyle elementów, ile chcemy zainicjalizować, czyli cztery. Zobacz teraz, w jaki sposób można odnosić się do konkretnych elementów tablicy:

Najpierw oczywiście definicja naszej cztero elementowej tablicy. Dla wygody zerujemy wszystkie elementy. Następnie kilka przykładowych operacji na elementach tablicy. Dostęp do elementów uzyskujemy dzieki operatorowi [] oraz podaniu odpowiedniego indexu. Zwróć uwagę na bardzo istotną rzecz! Elementy tablicy numerowane są od zera! Dlatego pierwszy element ma index [0], drugi – [1], trzeci – [2], czwarty – [3]. To koniec, więcej elementów nie ma. Zatem ostatnia linijka została opatrzona komentarzem. Należy o tym pamiętać i nie przekraczać zakresu tablicy, bo może to zaowocować nawet załamaniem programu!

tablice znakowe, czyli.. stringi 🙂

Do tej pory poznaliśmy jedynie tablice służące do przechowywania liczb. Były to liczby całkowite. Teraz zapoznamy się z tablicami znakowymi, nazywanymi ciągami znakowymi lub najkrócej – stringami. Stringi służa do przechowywania znaków, a co za tym idzie całych słów, fraz, wyrażeń. Jednym słowem wszelkiego rodzaju textu. Tradycyjnie wyjdźmy od przykładu:

Nasz string jest 30-elementową tablicą typu char. Obecnie zawiera on jakieś śmieci, jak wszystko, co nie zostało zainicjalizowane. Aby wstawić do stringu jakiś konkretny text należy podstawić pod każdy z jego indexów odpowiednie znaki. Spójrz:

Jak widzisz taka zabawa w podstawianie. Oczywiście takie operacje w normalnych warunkach wykonuje się funkcją strcpy. O funkcjach bibliotecznych kiedy indziej. Ważne jest, abyś wiedział, jak to działa. Pamiętaj, że podstawiane znaki umieszczamy w apostrofach. Nie myl z cudzysłowami! String musi także posiadać znak kończący. Zwróć uwagę, że my wstawiliśmy znak końca stringu pod indexem 12. W wyniku tego wszystko, co znajduje się za nim praktycznie nie istnieje. Mała wzmianka od inicjalizacji stringów. Definiując ciąg można od razu go zainicjalizować w taki sposób:

Zauważ, że nasz string mieści 13 znaków, zaś cały text dowolny text to 12 znaków. ten 13 znak to nasz znak kończący. Nie jest on widoczny, ale musiistnieć. Pamiętaj jeszcze, że taki sposób podstawienia textu do tablicy jest możliwy jedynie podczas inicjalizacji. Później tak nie można:

rozmiar tablicy

Czasem zachodzi potrzeba pobrania rozmiaru tablicy bądź też ilości jej elementów. Można to zrobić korzystając z operatora sizeof

tablice wielowymiarowe

Tablice wielowymiarowe to nic nadzwyczajnego, ale dobrze działa na wyobraźnię 😉 Popatrz:

Potrafisz sobie to wyobrazić? Tablica składa się ze 100 elementów. Każdy z nich to także tablica zawierająca dodatkowo 20 elementów. Jakby tego było mało każda z 20 tablic zawiera jeszcze po 10 elementów :-/ Żeby było łatwiej powiem tak. Nasza tabliczka to blok mieszkalny, w którym znajduje się 100 wejść [pierwszy wymiar]. W każdej klatce jest oczywiście winda. Dzięki niej możemy się przemieszczać między piętrami. Pięter jest 20 [drugi wymiar]. Na każdym piętrze znajduje się po 10 mieszkań [trzeci wymiar]. Jeśli czegoś nie zrozumiałeś to nic nie szkodzi. Tak naprawdę tablice trójwymiarowe są stosowane sporadycznie. Częściej korzysta się z dwuwymiarowych, ale również rzadko. O ile sobie przypominam to nigdy nie korzystałem z tablic większych, niż dwuwymiarowe.

Podsumowując lekcję. Pamiętaj, że:

1. Do elementów tablicy odnosimy się przy użyciu klamerek [] oraz indexu
2. Definiując tablicę można ją łatwo wyzerować pisząc: int tablica[10] = {0};
3. Elementy tablicy numerowane są od zera
4. Przekroczenie zakresu tablicy stanowi poważne zagrożenie
5. Tablice znakowe muszą zawierać znak kończący [ '\0′ ]

Autor: Kesay

[Artykuł pochodzi ze strony guidecpp.prv.pl, autor wyraził zgodę na publikację]