r03.pdf
(
316 KB
)
Pobierz
Szablon dla tlumaczy
Rozdział 3.
Zmienne i stałe
Program musi mieć możliwość przechowywania danych, z których korzysta. Dzięki zmiennym i
stałym mamy możliwość reprezentowania, przechowywania i manipulowania tymi danymi.
Z tego rozdziału dowiesz się
•
jak deklarować i definiować zmienne oraz stałe,
•
jak przypisywać wartości zmiennym oraz jak nimi manipulować,
•
jak wypisywać wartość zmiennej na ekranie.
Czym jest zmienna?
W C++ zmienna służy do przechowywania informacji – jest to miejsce 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 tymczasowe miejsce przechowywania. Gdy wyłączysz komputer,
wszystkie zmienne zostają utracone. Przechowywanie trwałe przebiega zupełnie inaczej. Zwykle
zmienne są przechowywane trwale dzięki umieszczeniu ich w bazie danych lub w pliku na dysku.
Przechowywanie w pliku na dysku zostanie omówione w rozdziale 16., „Zaawansowane
dziedziczenie.”
Dane są przechowywane w pamięci
Pamięć komputera można traktować jako szereg 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) stanowi etykietkę jednego z tych pojemników; dzięki
niej można go łatwo zlokalizować nie znając rzeczywistego adresu pamięci. Rysunek 3.1
przedstawia schemat przebiegu tego procesu. Jak 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.
Rysunek 3.1. Schematyczna reprezentacja pamięci
UWAGA Skrót RAM oznacza Random Access Memory (pamięć o dostępie swobodnym). Gdy
uruchamiasz program, jest on ładowany z pliku na dysku do pamięci RAM. W pamięci RAM
tworzone są wszystkie zmienne. Gdy programiści używają terminu „pamięć”, 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: 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 niej 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 (pojemników) ma przygotować dla zmiennej.
Swojego czasu programiści musieli znać się na bitach i bajtach, gdyż stanowią one podstawowe
jednostki przechowywania wszelkiego rodzaju danych. Programy komputerowe pozwalają na
ucieczkę od tych szczegółów, ale jest w dalszym ciągu pomocna wiedza o przechowywaniu
danych. Krótki przegląd podstaw matematyki dwójkowej możesz znaleźć w dodatku A, „Binarnie
i szesnastkowo.”
UWAGA Jeśli przeraża cię matematyka, nie przejmuj się dodatkiem A; tak naprawdę nie jest ci
potrzebny. Programiści nie muszą już być równocześnie matematykami, choć umiejętność
logicznego i racjonalnego myślenia jest zawsze pożądana.
Rozmiar liczb całkowitych
W danym komputerze każdy typ zmiennych zajmuje stałą ilość miejsca. Oznacza to, że liczba
całkowita może mieć w jednym komputerze dwa bajty, w innym cztery, lecz w danym komputerze
ma zawsze ten sam, niezmienny rozmiar.
Zmienna typu
char
(używana 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 przypuszczać, że język
powinien to określać precyzyjnie, ale tak nie jest. Ustalono jedynie, że typ
short
musi mieć
rozmiar mniejszy lub równy 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 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 być ci znana. Podzieliłem linie tak, aby mieściły się na całej
stronie książki. W rzeczywistości linie 6. i 7. powinny stanowić linię pojedynczą. Kompilator
ignoruje tak zwane białe spacje (spacje, tabulatory, przejścia do nowej linii), więc 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; informuje on o rozmiarze obiektu
przekazywanego mu jako parametr. Na przykład w linii 7., do operatora
sizeof()
jest
przekazywane słowo kluczowe
int
. 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
Od –32 768 do 32 767
unsigned long int
4 bajty
Od 0 do 4 294 967 295
long int
4 bajty
Od –2 147 483 648 do 2 147
483 647
int
(16 bitów)
2 bajty
Od –32 768 do 32 767
int
(32 bity)
4 bajty
Od –2 147 483 648 do 2 147
483 647
unsigned int
(16 bitów)
2 bajty
Od 0 do 65 535
unsigned int
(32 bity)
4 bajty
Od 0 do 4 294 967 295
char
1 bajt
256 różnych znaków
float
4 bajty
Od 1.2e-38 do 3.4e38
(dodatnich lub ujemnych)
double
8 bajtów
Od 2.2e-308 do 1.8e308
(dodatnich lub ujemnych)
UWAGA Rozmiary zmiennych mogą się różnić od pokazanych w tabeli 3.1 (w zależności od
używanego kompilatora i komputera). Jeśli twój komputer dał taki sam wynik, jaki pokazano pod
listingiem 3.1, tabela 3.1 powinna być zgodna z twoim kompilatorem. Jeśli wynik działania
listingu 3.1 w twoim komputerze jest inny, powinieneś sprawdzić w instrukcji kompilatora jaki
zakres wartości może być przechowywany w zmiennych różnych typów.
Definiowanie zmiennej
Zmienną tworzy się lub definiuje poprzez określenie jej typu, po którym wpisuje się jedną lub
więcej spacji, zaś po nich nazwę zmiennej i średnik. Nazwę zmiennej może stanowić praktycznie
dowolna kombinacja liter, lecz nie może ona zawierać spacji. Poprawnymi nazwami zmiennych są
na przykład:
x
,
J23qrsnf
czy
myAge
. Dobra nazwa zmiennej nie tylko informuje o tym, do czego
Plik z chomika:
Wojteczek
Inne pliki z tego folderu:
rdodc.pdf
(84 KB)
rdodb.pdf
(72 KB)
rdoda.pdf
(184 KB)
r21.pdf
(370 KB)
r20.pdf
(275 KB)
Inne foldery tego chomika:
Cisco
Kurs C++ od zera do hackera v. 1.0
Pascal
ZAHASŁOWANE
Zgłoś jeśli
naruszono regulamin