Poznaj C++ w$ godziny0222

Poznaj C++ w$ godziny0222



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].


Zapis za końcem tablicy

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.

Błąd słupków ogrodzeniowych

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],


Zapis za końcem tablicy

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.

Błąd słupków ogrodzeniowych

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.


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0226 Tablice 217 Jednak taka reprezentacja mniej przystaje do rzeczywistości ni
Poznaj C++ w$ godziny0228 Tablice 219 W książce omówimy* tablice wskaźników, tablice tworzone na ste
Poznaj C++ w$ godziny0230 Tablice 221Wskaźnik do tablicy a tablica wskaźników Rozpatrzmy trzy różne
Poznaj C++ w$ godziny0232 Tablice 223Usuwanie tablicy ze sterty Rodzina jest wskaźnikiem do tablicy
Poznaj C++ w$ godziny0234 Tablice 225 Żeby rozwiązać powstałe problemy, musimy wykorzystać specjalną
Poznaj C++ w$ godziny0236 Tablice 227 jEFEKT DZIAŁANIA: Lancuchl: Nikt nie jest sam Lancuch2: Nikt n
Poznaj C++ w$ godziny0221 212 Godzina 15Rysunek 15.1 Deklarowanie tablicy *— 4 bajty —► 100 bajtów
Poznaj C++ w$ godziny0224 215 TabliceTablice obiektów Każdy obiekt, niezależnie czy jest on standard
Poznaj C++ w$ godziny0227 218 Godzina 15 9:    cout « Tablic*[i] [j]« andl; 10:  
Poznaj C++ w$ godziny0237 228 Godzina 15 Nazwa tablicy to stały wskaźnik na pierwszy element tej tab
Poznaj C++ w$ godziny0001 Gdy masz czas tylko na właściwe rozwiązania... Intersoftlcind Gdy masz cza
Poznaj C++ w$ godziny0002 Jesse LibertyC++w 2 4 godziny Tłumaczenie: Grzegorz MichałekInlersofllond
Poznaj C++ w$ godziny0003 Tytuł oryginału: Teach Yourself C++ in 24 Hours, Second Edition Tłumaczeni
Poznaj C++ w$ godziny0004 Spis rozdziałów Część 1 Wstęp do C++ 1 1 Zaczynamy 3 2 Program w C++ 1
Poznaj C++ w$ godziny0005 Część VI Tematy specjalne 293 20 Specjalne klasy i
Poznaj C++ w$ godziny0006 Spis treści Część I Wstęp do C++    1 1    Z
Poznaj C++ w$ godziny0007 VI Poznaj C++ w 24 godziny Przypisywanie wartości do zmiennych
Poznaj C++ w$ godziny0008 Spis treści    vii Zmienne
Poznaj C++ w$ godziny0009 viii Poznaj C++ w 24 godziny 8    Zaawansowane sterowanie p

więcej podobnych podstron