Poznaj C++ w$ godziny0148

Poznaj C++ w$ godziny0148



Wskaźniki 137

Dlaczego będziemy wykorzystywać wskaźniki?

Jak dotąd, krok po kroku, zobaczyłeś jak przypisywać adresy zmiennych do wskaźników. Jednak w praktyce nigdy nie będziesz tak postępować. Dlaczego komplikować kod poprzez wprowadzanie wskaźników, skoro mamy możliwość prostego odczytywania i modyfikacji zmiennych. Jedynym powodem, dla którego pokazaliśmy takie metody działań na wskaźnikach była demonstracja, jak działa mechanizm wskaźników. Teraz, kiedy już wiesz, jak wykorzystać wskaźniki, możesz zrobić z nich dobry użytek. Zazwyczaj wskaźniki są wykorzystywane w trzech sytuacjach:

□    Zarządzanie danymi w pamięci operacyjnej.

□    Dostęp do wnętrza klas - danych i funkcji.

□    Przekazywanie wartości do zmiennych poprzez referencje.

W dalszym ciągu tego rozdziału skupimy się na zarządzaniu danymi w pamięci i dostępie do wewnętrznych elementów klasy — danych i funkcji. W trakcie godziny 10 — „Zaawansowane wykorzystanie wskaźników” poznamy zasady przekazywanie zmiennych do funkcji przez referencje.

Stos i wolna pamięć

Programiści na ogól wyróżniają pięć obszarów pamięci:

Obszar zmiennych globalnych

Wolna pamięć

Rejestry

Kod programu

Stos

Zmienne lokalne wraz z parametrami funkcji są przechowywane na stosie. Kod znajduje się w obszarze kodu programu (co jest chyba oczywiste). Zmienne globalne również znajdują się w przeznaczonym dla siebie obszarze. Rejestry są wykorzystywane do wewnętrznego zarządzania funkcjami (np. do przechowywania adresu szczytu stosu lub wskaźnika instrukcji). Cała pozostała pamięć jest dla programu wolna (określa się ją czasem jako stertę - ang. heap).

Problem ze zmiennymi lokalnymi polega na tym, że wraz z zakończeniem funkcji są one przez program „zapominane”. Zmienne globalne rozwiązują ten problem, jednak kosztem nieograniczonego dostępu do nich z dowolnego miejsca w programie, co niesie ze sobą znaczną komplikację kodu. Umieszczenie danych w wolnej pamięci operacyjnej rozwiązuje oba problemy.

Możesz z powodzeniem traktować wolną pamięć jako ogromy zbiór sekwencyjne ułożonych komórek pamięci „czekających” na dane. Jednak dostęp do tych komórek nie jest tak swobodny jak np. dostęp do stosu. Przed wykorzystaniem komórki trzeba „poprosić” system operacyjny o przydzielenie adresu i zarezerwowanie odpowiedniej liczby komórek. Dopiero wtedy można taki adres przypisać do wskaźnika i wykorzystywać.

Dlaczego będziemy wykorzystywać wskaźniki?

Jak dotąd, krok po kroku, zobaczyłeś jak przypisywać adresy zmiennych do wskaźników. Jednak w praktyce nigdy nie będziesz tak postępować. Dlaczego komplikować kod poprzez wprowadzanie wskaźników, skoro mamy możliwość prostego odczytywania i modyfikacji zmiennych. Jedynym powodem, dla którego pokazaliśmy takie metody działań na wskaźnikach była demonstracja, jak działa mechanizm wskaźników. Teraz, kiedy już wiesz, jak wykorzystać wskaźniki, możesz zrobić z nich dobry użytek. Zazwyczaj wskaźniki są wykorzystywane w trzech sytuacjach:

□    Zarządzanie danymi w pamięci operacyjnej.

□    Dostęp do wnętrza klas - danych i funkcji.

□    Przekazywanie wartości do zmiennych poprzez referencje.

W dalszym ciągu tego rozdziału skupimy się na zarządzaniu danymi w pamięci i dostępie do wewnętrznych elementów klasy - danych i funkcji. W trakcie godziny 10 -„Zaawansowane wykorzystanie wskaźników” poznamy zasady przekazywanie zmiennych do funkcji przez referencje.

Stos i wolna pamięć

Programiści na ogół wyróżniają pięć obszarów pamięci:

Obszar zmiennych globalnych

Wolna pamięć

Rejestry

Kod programu

Stos

Zmienne lokalne wraz z parametrami funkcji są przechowywane na stosie. Kod znajduje się w obszarze kodu programu (co jest chyba oczywiste). Zmienne globalne również znajdują się w przeznaczonym dla siebie obszarze. Rejestry są wykorzystywane do wewnętrznego zarządzania funkcjami (np. do przechowywania adresu szczytu stosu lub wskaźnika instrukcji). Cała pozostała pamięć jest dla programu wolna (określa się ją czasem jako stertę - ang. heap).

Problem ze zmiennymi lokalnymi polega na tym, że wraz z zakończeniem funkcji są one przez program „zapominane”. Zmienne globalne rozwiązują ten problem, jednak kosztem nieograniczonego dostępu do nich z dowolnego miejsca w programie, co niesie ze sobą znaczną komplikację kodu. Umieszczenie danych w wolnej pamięci operacyjnej rozwiązuje oba problemy.

Możesz z powodzeniem traktować wolną pamięć jako ogromy zbiór sekwencyjne ułożonych komórek pamięci „czekających” na dane. Jednak dostęp do tych komórek nie jest tak swobodny jak np. dostęp do stosu. Przed wykorzystaniem komórki trzeba „poprosić" system operacyjny o przydzielenie adresu i zarezerwowanie odpowiedniej liczby komórek. Dopiero wtedy można taki adres przypisać do wskaźnika i wykorzystywać.


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0142 Wskaźniki 131Przypisywanie adresu do wskaźnika Jak już mówiliśmy, każda zm
Poznaj C++ w$ godziny0140 Wskaźniki 129 Wskaźniki 129 13 14 15 16 17 18 cout « "longVar: "
Poznaj C++ w$ godziny0144 Wskaźniki 133 Operator dostępu pośredniego ( * ) jest używany w dwóch różn
Poznaj C++ w$ godziny0146 Wskaźniki 135 Wskaźniki 135 ANALIZA: W tym programie deklarujemy dwie zmie
Poznaj C++ w$ godziny0150 Wskaźniki 139 Jeśli new nie może zarezerwować miejsca na stercie (bądź co
Poznaj C++ w$ godziny0152 Wskaźniki 141 1:    unsigned short
Poznaj C++ w$ godziny0112 Więcej o klasach 99Klasy wykorzystujące inne klasy jako dane wewnętrzne Ba
Poznaj C++ w$ godziny0235 226Godzina 15Listing 15.8. Wykorzystanie strcpy (). 1:    #
siedem 3 v’> Jak zainstalować Windows 7. Instruktaż krok po kroku - PROGRAMY - Systemy operacyjne
skanowanie0009 3 OWCAitov ^ i rm KROK PO KROKU: O O # k. { A Zrób z plasteliny takie kawałki jak te.
skanowanie0014 2 KROK PO KROKU: Uformuj z plasteliny takie kształty jak te, które Sklej poszczególne
skanowanie0018 KROK PO KROKU: Ukształtuj z plasteliny takie elementy jak te.    Do tu
MALI EINSTEINI 1 Zabaw się w portrecistę i, krok po kroku, narysuj portret Leosia - tak jak wskazu
Język JAVA - „program krok po kroku" Jak zamodelować klasę w JAVIE? W przykładzie konstruktor t
Język JAVA - „program krok po kroku" Jak zamodelować klasę w JAVIE? Każdy język programowania m

więcej podobnych podstron