Tablice
Tablice to kolenja 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 najprostrzych tablic zawierających liczby. Oto przykład:
int tablica_liczb [10];
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:
int tablica [6] = {3,5,2,1};
Zauważ, że tablica jest sześcio elementowa. 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:
int tablica [6] = {0};
Tym sposobem mamy sześcio elementową 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:
int tablica [] = {2,4,8,16};
Spowoduje, że otrzymamy cztero elementową tablicę wypełnioną odpowiednimi wartościami. Zauwż, ż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:
int tablica_liczb [4] = {0}; //tablica zawiera same zera
tablica_liczb [0] = 34; //zapisanie wartości 34 pod indexem 0
tablica_liczb [1]++;//inkrementacja wartości spod indexu 1
tablica_liczb [2] -= 23; //zmniejszenie wartości zapisanej pod indexem 2 o 23
tablica_liczb [3] = tablica_liczb [0] + 7; //pod indexem 3 umieszczamy wartość elementu z indexu 0 powiększonego o 7
//tablica_liczb [4] = 34; UWAGA!! tablica zawiera tylko 4 elementy!
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:
char string [30];
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:
string [0] = 'd';
string [1] = 'o';
string [2] = 'w';
string [3] = 'o';
string [4] = 'l';
string [5] = 'n';
string [6] = 'y';
string [7] = ' ';
string [8] = 't';
string [9] = 'e';
string [10] = 'x';
string [11] = 't';
string [12] = '\0';//to jest znak kończący string
string [13] = 't';
string [14] = 'e';
string [15] = 'g';
string [16] = 'o';
string [17] = ' ';
string [18] = 'n';
string [19] = 'i';
string [20] = 'e';
string [21] = ' ';
string [22] = 'm';
string [23] = 'a';
string [24] = '\0';
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 na pod indexem 12. W wyniku tego wszystko, co znajduje się za nim praktycznie nie istnieje. Mała wzmianka odnośnie inicjalizacji stringów. Definiując ciąg można od razu go zainicjalizować w taki sposób:
char string [13] = "dowolny text"; //lub tak: char string[] = "dowolny text"
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 musi istnieć. Pamiętaj jeszcze, że taki sposób podstawienia textu do tablicy jest możliwy jedynie podczas inicjalizacji. Później tak nie można:
char string [13] = "dowolny text"; //ok
//char string = "inny text"; tak nie wolno!
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
int liczby [4];
int rozmiar_tablicy = sizeof (liczby);//rozmiar tablicy w bajtach
int ilosc_elementow_tablicy = rozmiar_tablicy / sizeof (int);//ilość elementów tablicy
tablice wielowymiarowe
Tablice wielowymiarowe to nic nadzwyczajnego, ale dobrze działa na wyobraźnię

Popatrz:
int tabliczka [100] [20] [10];
Potrafisz sobie to wyobrazić? Tablica składa się ze 100 elenentó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.