przeniesiono część do C/Tablice - więcej, + edycja treści
m przeniesiono fragment do C/Tablice - więcej, link |
przeniesiono część do C/Tablice - więcej, + edycja treści |
||
Linia 50:
Jak widać, wszystko się zgadza.
W powyżej zamieszczonym przykładzie użyliśmy stałej do podania rozmiaru tablicy. Jest to o tyle pożądany zwyczaj, że w razie konieczności zmiany rozmiaru tablicy zmieniana jest tylko jedna linijka kodu przy stałej, a nie kilkadziesiąt innych linijek, rozsianych po kodzie całego programu.▼
▲W powyżej zamieszczonym przykładzie użyliśmy stałej do podania rozmiaru tablicy. Jest to o tyle pożądany zwyczaj, że w razie
==Odczyt/zapis wartości do tablicy==
Tablicami posługujemy się tak samo jak zwykłymi zmiennymi. Różnica polega jedynie na
{{Uwaga|Osoby, które wcześniej programowały w językach, takich jak [[Object Pascal|Pascal]], Basic czy [[Fortran]], muszą przyzwyczaić się do tego, że w języku C indeks numeruje się od 0
Spróbujmy przedstawić to na działającym przykładzie. Przeanalizuj następujący kod:
Linia 86 ⟶ 68:
}
</source>
Jak widać, na początku deklarujemy 5-elementową tablicę, którą od razu zerujemy. Następnie pod trzeci i czwarty element (liczone począwszy od 0) podstawiamy liczby 3 i 7. Pętla ma za zadanie wyprowadzić wynik naszych działań.
==Tablice znaków==
Tablice znaków, tj. typu char oraz unsigned char, posiadają dwie ogólnie przyjęte nazwy, zależnie od ich przeznaczenia:
* bufory - gdy wykorzystujemy je do przechowywania ogólnie pojętych danych, gdy traktujemy je jako po prostu "ciągi bajtów" (typ char ma rozmiar 1 bajta, więc jest elastyczny do przechowywania np. danych wczytanych z pliku przed ich przetworzeniem).
* napisy - gdy zawarte w nich dane traktujemy jako ciągi liter; jest im poświęcony osobny rozdział [[C/Napisy|Napisy]].
Linia 122 ⟶ 104:
};
</source>
Innym, bardziej elastycznym sposobem deklarowania tablic wielowymiarowych, jest użycie wskaźników. Opisane to zostało w następnym [[
== Ograniczenia tablic ==
Pomimo swej wygody '''tablice statyczne''' mają ograniczony, z góry zdefiniowany rozmiar, którego nie można zmienić w trakcie działania programu. Dlatego też w niektórych zastosowaniach tablice statyczne zostały wyparte '''
{{Uwaga|Przy używaniu tablic trzeba być szczególnie ostrożnym przy konstruowaniu pętli, ponieważ ani kompilator, ani skompilowany program nie będą w stanie wychwycić przekroczenia przez indeks rozmiaru tablicy <ref>W zasadzie kompilatory mają możliwość dodania takiego sprawdzania, ale nie robi się tego, gdyż znacznie spowolniłoby to działanie programu. Takie postępowanie jest jednak pożądane w okresie testowania programu.</ref>. Efektem będzie odczyt lub zapis pamięci, znajdującej się poza tablicą.}}
{{infobox|[[C++/Różnice między C a C++|Programiści C++]] mogą użyć [[C++/Vector|klasy vector]], która może być wygodnym zamiennikiem tablic.}}
Wystarczy pomylić się o jedno miejsce (tzw. błąd [[w:off by one|off by one]]) by spowodować, że działanie programu zostanie nagle przerwane przez system operacyjny:
<source lang="c">
Linia 137 ⟶ 120:
foo[i] = 0;
</source>
==Zobacz również ==
|