r03-06.doc

(183 KB) Pobierz
Szablon dla tlumaczy

Rozdział 3.
Zmienne i stałe

Program musi mieć możliwość przechowywania używanych przez siebie danych, z których korzysta. Dzięki Zzmienneym i stałeym mamy możliwość oferują różne sposoby reprezentowania, przechowywania i manipulowania tymi danymi.

W tym rozdziale dowiesz sięZ tego rozdziału dowiesz się

·          Jjak deklarować i definiować zmienne oraz stałe,.

·          Jjak przypisywać wartości zmiennym oraz jak nimi manipulować, tymi wartościami.

·          Jjak wypisywać wartość zmiennej na ekranie.

Czym jest zmienna?

W C++ zmienna jest miejscem dosłuży do przechowywania informacji. Zmienna jest to jest miejscem w pamięci komputera, w którym możesz umieścić wartość, i z którego możesz ją później odczytać.

Zwróć uwagę, że jest to jedynie tymczasowe miejsce przechowywania. Gdy wyłączysz komputer, wszystkie zmienne zostają utracone. Trwałe pPrzechowywanie trwałe jest zupełnie innym zagadnieniemprzebiega zupełnie inaczej. Zwykle zmienne są przechowywane trwale w wynikudzięki umieszczeniau ich w bazie danych lub w pliku na dysku. Przechowywanie w pliku na dysku jest zostanie omaówiaone w rozdziale 16., „Zaawansowane dziedziczenie.”

Dane są przechowywane w pamięci

Pamięć komputera można traktować jako szereg pojemników. Każdy pojemnik jest jednym z bardzo wielu takich samych pojemników, ułożonych jeden za drugim. Każdy pojemnik — czyli miejsce w pamięci — jest oznaczony kolejnym numerem. Te numery są nazywane adresami pamięci. Zmienna rezerwuje jeden lub więcej pojemników, w których może przechowywać wartość.

Nazwa zmiennej (na przykład myVariable) jest stanowi etykietkąę jednego z tych pojemników,; dzięki której niej można go łatwo zlokalizować bez znajomościnie znając rzeczywistego adresu pamięci. Rysunek 3.1 przedstawia schematyczną reprezentację tej idei przebiegu tego procesu. Jak na nim widać, zmienna myVariable rozpoczyna się od adresu 103. W zależności od rozmiaru tej zmiennej, może ona zająć w pamięci jeden lub więcej adresów w pamięci.

 

Rysunek 3.1. Schematyczna reprezentacja pamięci

UWAGA              Skrót RAM oznacza Random Access Memory (pamięć o dostępie swobodnym). Gdy uruchamiasz program, to jest on ładowany z pliku na dysku do pamięci RAM z pliku na dysku. W pamięci RAM także tworzone wszystkie zmienne. Gdy programiści mówią oużywają terminu pamięcić”, zwykle mają na myśli pamięć RAM, do której się odwołują.

 

Przydzielanie pamięci

Gdy definiujesz zmienną w C++, musisz poinformować kompilator o jej rodzaju tej zmiennej: czy jest to liczba całkowita, znak, czy coś innego. Ta informacja mówi kompilatorowi, ile miejsca ma zarezerwować dla zmiennej oraz jaki rodzaj wartości będzie w tej zmiennejniej przechowywany.

Każdy pojemnik ma rozmiar jednego bajtu. Jeśli tworzona zmienna ma rozmiar czterech bajtów, to wymaga czterech bajtów pamięci, czyli czterech pojemników. Typ zmiennej (na przykład liczba całkowita) mówi kompilatorowi, ile pamięci (ile pojemników) ma przygotować dla zmiennej.

Swojego czasu programiści musieli koniecznie znać się na bitach i bajtach, gdyż stanowią one podstawowe jednostki dla przechowywania wszelkiego rodzaju danych. Programy komputerowe pozwalają na uzyskanie lepszej abstrakcjiucieczkę od tych szczegółów, ale jest w dalszym ciągu pomocna jest wiedza o tym, jak dane są przechowywaneiu danych.. Szybki Krótki przegląd koncepcji stanowiących podstawę matematyki dwójkowej możesz znaleźć w dodatku A, „Binarnie i szesnastkowo.”

UWAGA              Jeśli przeraża cię matematyka sprawia że z krzykiem wybiegasz z pokoju, wtedy nie przejmuj się dodatkiem A; tak naprawdę nie jest ci potrzebny. Prawdą jest, że programiści nie muszą już być równocześnie matematykami, choć zawsze pożądana jest umiejętność logicznego i racjonalnego myślenia jest zawsze pożądana.

Rozmiar liczb całkowitych

W danym komputerze każdy typ zmiennych zajmujeW każdym komputerze każdy typ zmiennych zajmuje stałą, niezmienną ilość miejsca. To Oznaczya to, że liczba całkowita może mieć w jednym komputerze dwa bajty, zaś w innym cztery, lecz w danym komputerze ma zawsze ten sam, niezmienny rozmiar.

Zmienna typu char (używanegoa do przechowywania znaków) ma najczęściej rozmiar jednego bajtu.

Krótka  liczba całkowita (short) ma w większości komputerów rozmiar dwóch bajtów, zaś długa  liczba całkowita (long) ma zwykle cztery bajty. Natomiast liczba całkowita (bez słowa kluczowego short lub long) może mieć dwa lub cztery bajty. Można by sądzićprzypuszczać, że język powinien to precyzyjnie określać precyzyjnie, ale tak nie jest. Ustalono Jjedynie co musi zostać zapewnione, to to, że typ short musi mieć rozmiar mniejszy lub równy niż typowi int (integer, liczba całkowita), który z kolei musi mieć rozmiar mniejszy lub równy typowi long.

Najprawdopodobniej jednak pracujesz z komputerem, w którym typ short ma dwa bajty, zaś typy int i long mają po cztery bajty.

Rozmiar liczb całkowitych jest wyznaczany przez procesor (16 lub 32 bity) oraz kompilator. W nowoczesnych, 32-bitowych procesorach Pentium z nowoczesnymi najnowszymi kompilatorami (na przykład Visual C++4 lub nowsze), liczby całkowite mają cztery bajty. W tej książce zakładamy, że liczby całkowite (typ int) mają cztery bajty, choć w twoim przypadku może być inaczej.

Znak jest pojedynczą literą, cyfrą lub symbolem i zajmuje pojedynczy bajt pamięci.

Skompiluj i uruchom w swoim komputerze listing 3.1; pokaże on dokładny rozmiar każdego z tych typów.

Listing 3.1. Sprawdzanie rozmiarów typów zmiennych istniejących w twoim komputerze.

  0:  #include <iostream>

  1: 

  2:  int main()

  3:  {

  4:      using std::cout;

  5: 

  6:      cout << "Rozmiar zmiennej typu int to:\t\t"   

  7:          << sizeof(int)    << " bajty.\n";

  8:      cout << "Rozmiar zmiennej typu short int to:\t"

  9:          << sizeof(short)  << " bajty.\n";

10:      cout << "Rozmiar zmiennej typu long int to:\t" 

11:          << sizeof(long)   << " bajty.\n";

12:      cout << "Rozmiar zmiennej typu char to:\t\t"   

13:          << sizeof(char)   << " bajty.\n";

14:      cout << "Rozmiar zmiennej typu float to:\t\t"  

15:          << sizeof(float)  << " bajty.\n";

16:      cout << "Rozmiar zmiennej typu double to:\t"   

17:          << sizeof(double) << " bajty.\n";

18:      cout << "Rozmiar zmiennej typu bool to:\t"     

19:          << sizeof(bool)   << " bajty.\n";

20: 

21:      return 0;

22:  }

Wynik:

Rozmiar zmiennej typu int to:           4 bajty.

Rozmiar zmiennej typu short int to:     2 bajty.

Rozmiar zmiennej typu long int to:      4 bajty.

Rozmiar zmiennej typu char to:          1 bajty.

Rozmiar zmiennej typu float to:         4 bajty.

Rozmiar zmiennej typu double to:        8 bajty.

Rozmiar zmiennej typu bool to:          1 bajty.

UWAGA              W twoim komputerze rozmiary zmiennych mogą być inne.

Większość listingu 3.1 powinna już być ci znanaznajoma. Podzieliłem linie tak, aby mieściły się na w szerokości całej stroniestrony książki., tak w Więc w rzeczywistości linie 6. i 7. powinny stanowić linię pojedynczą linię. Kompilator ignoruje tak zwane białe spacje (spacje, tabulatory, przejścia do nowej linii), więc linie 6 i 7 traktuje linie 6. i 7. jak jedną całość.

Nowym elementem w tym programie jest użycie w liniach od 6. do 19. operatora (funkcji) sizeof(). Ten operator jest dostarczany przez kompilator; i informuje on o rozmiarze obiektu przekazywanego mu jako parametr. Na przykład w linii 7., do operatora sizeof() jest przekazywane słowo kluczowe int. Używając Za pomocą tego operatora byłem w stanie sprawdzić że w moim komputerze zmienne typu int mają ten sam rozmiar, co zmienne typu long, czyli cztery bajty.

Zapis ze znakiem i bez znaku

Wszystkie typy całkowite występują w dwóch odmianach: signed (ze znakiem) oraz unsigned (bez znaku). Czasem potrzebna jest liczba ujemna, a czasem dodatnia. Liczby całkowite (krótkie i długie) bez słowa kluczowego unsigned są traktowane jako liczby ze znakiem. Liczby całkowite signed są albo dodatnie albo ujemne, zaś liczby całkowite unsigned są zawsze dodatnie.

Liczby ze znakiem i liczby bez znaku mają po tyle samo bajtów, więc największa liczba, jaką można przechować w zmiennej całkowitej bez znaku jest dwa razy większa niż największa liczba dodatnia jaką można przechować w zmiennej całkowitej ze znakiem. Zmienna typu unsigned short może pomieścić wartości od 0 do 65 535. Połowa tych wartości (reprezentowana przez zmienną typu signed short) jest ujemna, więc zmienna tego typu może przechowywać jedynie wartości od –32 768 do 32 767. Jeśli wydaje ci się to skomplikowane, zajrzyj do dodatku A.

Podstawowe typy zmiennych

Język C++ posiada jeszcze kilka innych wbudowanych typów zmiennych. Można je wygodnie podzielić na typy całkowite, typy zmiennopozycyjne oraz typy znakowe.

Zmienne zmiennoprzecinkowe zawierają wartości, które można wyrazić w postaci ułamków dziesiętnych — stanowią obszerny podzbiór liczb rzeczywistych. Zmienne znakowe mają rozmiar jednego bajtu i są używane do przechowywania 256 znaków i symboli pochodzących z zestawów znaków ASCII i rozszerzonego ASCII.

Zestaw ASCII jest standardowym zestawem znaków używanych w komputerach. ASCII stanowi skrót od American Standard Code for Information Interchange. Prawie każdy komputerowy system operacyjny obsługuje zestaw ASCII, choć wiele systemów obsługuje także inne, międzynarodowe zestawy znaków.

W tabeli 3.1 przedstawione zostały typy zmiennych używanych w programach C++. Tabela pokazuje  typ zmiennej, jej rozmiar w pamięci (zakładany w tej książce) oraz rodzaj wartości, jakie mogą być przechowywane w zmiennej takiego typu. Zakres przechowywanych wartości zależy od rozmiaru zmiennej, więc sprawdź w swoim komputerze wynik działania programu z listingu 3.1.

Tabela 3.1. Typy zmiennych

Typ

Rozmiar

Wartości

bool

1 bajt

prawda lub fałsz

unsigned short int

2 bajty

Od 0 do 65 535

short int

2 bajty

...
Zgłoś jeśli naruszono regulamin