Poznaj C++ w$ godziny0230

Poznaj C++ w$ godziny0230



Tablice 221

Wskaźnik do tablicy a tablica wskaźników

Rozpatrzmy trzy różne deklaracje:

1:    KOT    RodzinaJeden[500];

2:    KOT    *RodzinaDwa[500];

3:    KOT    *RodzinaTrzy = new KOT[500];

RodzinaJeden to tablica 500 obiektów klasy KOT. RodzinaDwa to tablica 500 wskaźników do obiektów klasy KOT. RodzinaTrzy to wskaźnik do tablicy 500 obiektów klasy KOT.

Różnice między tymi trzema deklaracjami powoduję skrajnie różne metody ich obsługi. Można powiedzieć, że RodzinaTrzy jest wariantem RodzinaJeden i są one całkowicie różne od tablicy RodzinaDwa.

Widać, jak wskaźniki odnoszą się do tablic. W trzecim przypadku, RodzinaTrzy jest wskaźnikiem do tablicy. Oznacza to, że adres zawarty we wskaźniku RodzinaTrzy jest adresem pierwszego elementu tablicy. Podobnie jest w przypadku tablicy RodzinaJeden.

Nazwy wskaźników i tablic

W C++- nazwa tablicy jest jednocześnie nazwą stałego wskaźnika na pierwszy element tej tablicy. W deklaracji:

KOT Rodzina[50];

Rodzina jest wskaźnikiem do &Rodzina[0], czyli adresem pierwszego elementu w tablicy Rodzina.

Nazwa tablicy może być wykorzystywana jako stały wskaźnik i na odwrót. Oznacza to, że np. Rodzina + 4 będzie znaczyło to samo co Rodzina [4].

Kompilator odpowiada za właściwą obsługę arytmetyki przy dodawaniu, inkremen-tacji lub dekrementacji wskaźników. Adres będący wynikiem dodawania Rodzina + 4 nie jest adresem czwartego bajtu począwszy od początku tablicy, lecz adresem 4 elementu tablicy. Jeśli każdy element ma 4 bajty to Rodzina + 4 oznacza przesunięcie o 16 bajtów względem początku tablicy. Jeżeli obiekt klasy KOT zajmowałby 20 bajtów (np. 4 zmienne typu long i 2 zmienne typu short) to Rodzina + 4 oznaczałoby przesunięcie o 80 bajtów.

Listing 15.5. ilustruje zasady tworzenia i wykorzystywania tablic na stercie.

Listing 15.5. Tworzenie tablicy z wykorzystaniem new

) ----------------------------------------------------------------------—

1:    // Listing 15.5 - Tablica    na stercie

2:

3:    #include <iostream.h>

4:

5:    class KOT

Wskaźnik do tablicy a tablica wskaźników

Rozpatrzmy trzy różne deklaracje:

1:    KOT    RodzinaJeden[500];

2:    KOT    *RodzinaDwa[500];

3:    KOT    *RodzinaTrzy = new    KOT[500];

RodzinaJeden to tablica 500 obiektów klasy KOT. RodzinaDwa to tablica 500 wskaźników do obiektów klasy KOT. RodzinaTrzy to wskaźnik do tablicy 500 obiektów klasy KOT.

Różnice między tymi trzema deklaracjami powoduję skrajnie różne metody ich obsługi. Można powiedzieć, że RodzinaTrzy jest wariantem RodzinaJeden i są one całkowicie różne od tablicy RodzinaDwa.

Widać, jak wskaźniki odnoszą się do tablic. W trzecim przypadku, RodzinaTrzy jest wskaźnikiem do tablicy. Oznacza to, że adres zawarty we wskaźniku RodzinaTrzy jest adresem pierwszego elementu tablicy. Podobnie jest w przypadku tablicy RodzinaJeden.

Nazwy wskaźników i tablic

W C++ nazwa tablicy jest jednocześnie nazwą stałego wskaźnika na pierwszy element tej tablicy. W deklaracji:

KOT Rodzina[50];

Rodzina jest wskaźnikiem do &Rodzina[0], czyli adresem pierwszego elementu w tablicy Rodzina.

Nazwa tablicy może być wykorzystywana jako stały wskaźnik i na odwrót. Oznacza to, że np. Rodzina + 4 będzie znaczyło to samo co Rodzina [4 ],

Kompilator odpowiada za właściwą obsługę arytmetyki przy dodawaniu, inkremen-tacji lub dekrementacji wskaźników. Adres będący wynikiem dodawania Rodzina + 4 nie jest adresem czwartego bajtu począwszy od początku tablicy, lecz adresem 4 elementu tablicy. Jeśli każdy element ma 4 bajty to Rodzina + 4 oznacza przesunięcie o 16 bajtów względem początku tablicy. Jeżeli obiekt klasy KOT zajmowałby 20 bajtów (np. 4 zmienne typu long i 2 zmienne typu short) to Rodzina + 4 oznaczałoby przesunięcie o 80 bajtów.

Listing 15.5. ilustruje zasady tworzenia i wykorzystywania tablic na stercie.

Listing 15.5. Tworzenie tablicy z wykorzystaniem new

1:    // Listing 15.5 - Tablica    na stercie

2:

3:    #include <iostream.h>

4:

5:    class KOT


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0232 Tablice 223Usuwanie tablicy ze sterty Rodzina jest wskaźnikiem do tablicy
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$ godziny0222 Tablice 213 Tablice
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$ godziny0018 Część IWstęp do C++ VGodzina 1    Zaczynamy 2   &
SNC01323 Zaraz po wniknięciu plemnika do owocytu komórka jajowa wykazuje trzy różne reakcje: 1. Reak
Poznaj C++ w$ godziny0237 228 Godzina 15 Nazwa tablicy to stały wskaźnik na pierwszy element tej tab
DSC00673 Zastosowanie wskaźników do pracy z tablicami •    Wskaźniki wskazujące eleme
Tablica 1.6. Wskaźnik „Oceny ogólnej" dla trzech propozycji inwestycyjnych (skala od 1 do
DSC00671 Zastosowanie wskaźników do pracy z tablicami •    Wskaźniki mogą służyć do
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:  

więcej podobnych podstron