Tablice 213
Tablice 213
Wartość |
dla | |
Wartość |
dla | |
Wartość |
dla | |
0: |
3 | |
1: |
6 | |
2: |
9 | |
3: |
12 | |
4: |
15 |
mojaTablica[2]: mojaTablica[3]: mojaTablica[4]:
9
12
15
W linii 6 deklarujemy tablicę 5 wartości całkowitych o nazwie mojaTablica. Linia 8 rozpoczyna pętle od 0 do 4 poprawnych wartości indeksów (offsetów) w pięcioelementowej tablicy. Użytkownik jest proszony o podanie kolejnych wartości zapamiętywanych następnie w tablicy.
Pierwsza wartość jest zapamiętywana w mojaTablica [0], druga w mojaTablica [ 1 ] itd. Druga pętla for wypisuje zapamiętane w tablicy wartości na ekranie.
Tablice są numerowane od 0 a nie od 1. Jest to przyczyna wielu błędów u początkujących programistów. Zawsze gdy wykorzystujesz tablice, pamiętaj, że np. tablica zawierająca 10 elementów jest numerowana od nazwaTablicy[0] do nazwaTablicy!9]. Nie ma czegoś takiego jak nazwaTablicy [10].
Kiedy wstawiasz wartość do tablicy, kompilator oblicza miejsce w pamięci zarezerwowanej dla tablicy na podstawie rozmiaru pojedynczego elementu i podanego offsetu. Załóżmy, że chcesz zapisać wartość w tablicy tablicaLong[5] - w szóstym elemencie. Kompilator pomnoży podany offset równy 5 przez rozmiar każdego elementu, w tym wypadku 4. Następnie przesunie się o policzoną liczbę bajtów - 20 — od początku tablicy i zapisze tam wartość.
Jeśli spróbowałbyś zapisać wartość w elemencie tablicaLong[50], to fakt, że taki element nie istnieje zostałby przez kompilator zignorowany. Policzyłby on adres, w którym dana wartość powinna się znaleźć — 200 — i tam zapisał podaną wartość. Pod obliczonym adresem mogłaby znajdować się dowolna inna zmienna i zapisanie tam wartości mogłoby spowodować nieprzewidywalne skutki. Jeśli będziesz mieć szczęście to twój program przestanie działać. Jeśli szczęście Ci nie dopisze, to twój program będzie działał dalej, ale będziesz otrzymywał bezsensowne wyniki. Będziesz miał również problemy ze zlokalizowaniem źródła błędu.
Częstym błędem jest przekroczenie o jeden rozmiaru tablicy i zapis tuż za jej końcem. Taka pomyłka jest często określana jako błąd słupków ogrodzeniowych. Ten problem odnosi się do obliczenia, ile słupków potrzeba na 10 metrowy płot, jeśli na każdy metr płotu ma przypadać jeden słupek. Większość ludzi powie: „No jak to ile? 10!”, ale prawidłowa odpowiedź brzmi 11. Ilustruje to rysunek 15.2.
9
Wartość |
dla | |
Wartość |
dla | |
Wartość |
dla | |
0: |
3 | |
1: |
6 | |
2: |
9 | |
3: |
12 | |
4: |
15 |
mojaTablica[2]: mojaTablica[3]: mojaTablica[4]:
12
15
W linii 6 deklarujemy tablicę 5 wartości całkowitych o nazwie tnoja-Tablica. Linia 8 rozpoczyna pętle od 0 do 4 poprawnych wartości indeksów (offsetów) w pięcioelementowej tablicy. Użytkownik jest proszony o podanie kolejnych wartości zapamiętywanych następnie w tablicy.
Pierwsza wartość jest zapamiętywana w mojaTablica [0], druga w mojaTablica [1] itd. Druga pętla for wypisuje zapamiętane w tablicy wartości na ekranie.
Tablice są numerowane od 0 a nie od 1. Jest to przyczyna wielu błędów u początkujących programistów. Zawsze gdy wykorzystujesz tablice, pamiętaj, że np. tablica zawierająca 10 elementów jest numerowana Od nazwaTablicy[0] do nazwaTablicy[9]. Nie ma CZegOŚ takiego jak nazwaTablicy [10],
Kiedy wstawiasz wartość do tablicy, kompilator oblicza miejsce w pamięci zarezerwowanej dla tablicy na podstawie rozmiaru pojedynczego elementu i podanego offsetu. Załóżmy, że chcesz zapisać wartość w tablicy tablicaLong[5] - w szóstym elemencie. Kompilator pomnoży podany offset równy 6 przez rozmiar każdego elementu, w tym wypadku 4. Następnie przesunie się o policzoną liczbę bajtów - 20 — od początku tablicy i zapisze tam wartość.
Jeśli spróbowałbyś zapisać wartość w elemencie tablicaLong[50]. to fakt. że taki element nie istnieje zostałby przez kompilator zignorowany. Policzyłby on adres, w którym dana wartość powinna się znaleźć — 200 — i tam zapisał podaną wartość. Pod obliczonym adresem mogłaby znajdować się dowolna inna zmienna i zapisanie tam wartości mogłoby spowodować nieprzewidywalne skutki. Jeśli będziesz mieć szczęście to twój program przestanie działać. Jeśli szczęście Ci nie dopisze, to twój program będzie działał dalej, ale będziesz otrzymywał bezsensowne wyniki. Będziesz miał również problemy ze zlokalizowaniem źródła błędu.
Częstym błędem jest przekroczenie o jeden rozmiaru tablicy i zapis tuż za jej końcem. Taka pomyłka jest często określana jako błąd słupków ogrodzeniowych. Ten problem odnosi się do obliczenia, ile słupków potrzeba na 10 metrowy płot, jeśli na każdy metr płotu ma przypadać jeden słupek. Większość ludzi powie: „No jak to ile? 10!”, ale prawidłowa odpowiedź brzmi 11. Ilustruje to rysunek 15.2.