Tablice 1. Deklaracja tablicy Tablica jest zbiorem elementów tego samego typu. Każdy element tablicy ma numer. Numer pierwszego elementu w tablicy jest zawsze równy zero. W języku C nie można deklarować tablic wielowymiarowych, jest jednak możliwa deklaracja tablic zawierających tablice, co odpowiada tablicom wielowymiarowym w innych językach. Deklaracja tablicy ma postać: [typ_elementu] [nazwa_zmiennej] [rozmiar] Przykład: int arr[10]; Każdy element deklarowanej tablicy będzie typu typ_elementu, pierwszy element będzie miał numer 0, drugi - 1, ... , ostatni - rozmiar-1. Tablicę można inicjować podając w deklaracji po jej nazwie i znaku równości listę wartości oddzielonych przecinkami i zamkniętych w nawiasach klamrowych.
int a[2][3]; /* podano w postacie macierzy a[0][0] a[0][1] a[0][2] Jeśli tablica jest inicjowana w deklaracji, to nie jest konieczne podawanie jej rozmiaru. Możliwość ta jest dostępna we wszystkich kompilatorach ANSI C. Przykłady: int a1[5] = {1,5,3,4,2}; int a2[] = {1,5,6,3,4,5,6}; int a[2][3]; /* podano w postacie macierzy a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] */ double b[10]; /* wektor z 10 elementów typu double */ int w[3][3] = { { 2, 3, 4 }, { 3, 4, 8 }, { 1, 0, 9 } }; Tablic używa się w programie podając nazwę zmiennej tablicowej oraz numer elementu, którego operacja ma dotyczyć ujęty w nawiasy kwadratowe.
Jako numer elementu może służyć stała całkowita, zmienna typu całkowitego lub dowolne wyrażenie, którego wynikiem jest liczba całkowita. Nawiasy kwadratowe zawierające numer elementu tablicy nazywane są operatorem indeksowania. Przykład: int a[10]; int i; i = 5; a[5] = 10; a[a[5] - 5] = 4; Możliwe jest zadeklarowanie tablicy tablic (odpowiadającej tablicy dwu- lub więcej wymiarowej): int a[10][15]; Powyższa instrukcja deklaruje 10-cio elementową tablicę a, której polami są 15-sto elementowe tablice zmiennych typu int.
Odwołanie do elementów tablicy następuje w sposób naturalny - najpierw podaje się numer tablicy, potem numer elementu wewnątrz tej tablicy: a[4][5] = 10; Niepoprawne jest: a[10][19] = 6;
2. Tablice, funkcje i wskaźniki Nazwa tablicy (bez nawiasów []) oznacza wskaźnik na pierwszy element tej tablicy (element o numerze 0). Nazwa tablicy jest jednak wskaźnikiem stałym, tzn. nie można przypisać jej innego wskaźnika. Możliwa jest jednak operacja odwrotna tzn. przypisanie wskaźnikowi nazwy tablicy: int dane[10]; int *p; p = dane; Na wskaźnikach można wykonywać operacje dodawania lub odejmowania liczb całkowitych. Dodanie liczby całkowitej n do wskaźnika powoduje, że wynik wskazuje o n elementów dalej niż wskaźnik wyjściowy. Podawanie liczby nie oznacza zwiększenia wskaźnika o n bajtów, ale o n elementów tego typu na jaki wskazuję wskaźnik
Nie można stosować dodawania lub odejmowania liczb do wskaźników typu void *, ponieważ nie wiadomo na jakiego typu element wskazuje. Ponieważ nazwa tablicy jest wskaźnikiem na pierwszy element, więc również do tej nazwy można dodawać liczbę całkowitą (n) i w ten sposób uzyskać wskaźnik na element tablicy o numerze n. Aby uzyskać wartość zmiennej, na którą wskazuje wskaźnik należy przed nazwą tego wskaźnika napisać '*'. Operator '*' nazywa się operatorem wyłuskania. Dostęp do elementu tablicy o numerze n można, więc uzyskać na 2 sposoby: dane[n] *(dane + n) W przypadku odwołania do wskaźnika, który nie jest tablicą (ale może wskazywać na pewien element tablicy) można również stosować oba podane wyżej sposoby!
Poprawne są zapisy: p = dane; p[2] = 2; oraz p = dane +1; p[1] = 2; i są one równoważne zapisowi: dane[2] = 2; Kompilator zamienia wszystkie odwołania do elementu tablicy zapisane za pomocą operatora [ ], czyli nazwa[n] na zapis *(nazwa +n) - oba te zapisy są równoważne
4. Operacji dla tablic. 4.1 Operacji jednowymiarowe. Suma elementów tablicy. Niech mamy tablice
Suma elementów tablicy.
Iloraz elementów tablicy. Niech mamy tablice
Iloraz elementów tablicy. Niech mamy tablice
Uporządkowanie tablicy liczb.
Uporządkowanie tekstowej tablicy.
Uporządkowanie tekstowej tablicy.