Zmienne są to takie komórki gdzie program trzyma swoje informacje. Programista
je definiuje, nadaje im nazwę, a w kodzie źródłowym operuje nimi.
Istnieje kilka rodzajów zmiennych:
Definiując zmienną musimy podać jej typ i jej nazwę. Ewentualnie wartość początkową.
Przy nadawaniu nazwy trzeba pamiętać że kompilator ma swoje nazwy zastrzeżone
i nie wolno w ten sposób nazywać zmiennych! Są to słowa kluczowe:
asm, auto, break, case, catch, char, class, const,
continue, default, delete, do, double, else, enum, extern, float, for, friend,
goto, if, inline, int, long, new, operator, private, protected, public, register,
return, short, signed, sizeof, static, struct, switch, template, this, throw, try,
typedef, union, unsigned, virtual, void, volatile, while
Jeżeli edytor wyróżni ci nazwę zmiennej to znaczy że jest ona niedozwolona. Kompilator
rozróżnia małe i duże litery, i trzeba uważać bo zmienna Abc jest inną zmienną niż abc!!!
Przykład definicji:
int liczba=1; //zadeklarowano zmienną o nawie liczba i przypisano jej wartość 1
można używać zmiennych zdefiniowanych w innym pliku (oczywiście dołączonym do kodu)
instrukcją extern Np:
extern int zmienna;
Jednak to będzie ci potrzebne przy bardziej skąplikowanych programach.
Jeżeli zdefiniujemy zmienną i nadamy jej charakter const to w tedy
nie możemy modyfikować jej wartości podczas wykonywania programu, i podczas
definicji tej stałej musi być nadana wartość.
Potrzebne jest to przy definiowaniu tablic.
Zanim zaczniesz analizować ten tekst zapoznaj się z definicjami funkcji, i z pętlami.
Każda zmienna ma określony zasięg, czyli nie wszędzie jest ona dostępna.
Największy zasięg ma zmienna która jest zdefiniowana na samym początku pliku przed definicją funkcji.
Jak wiesz przy kod składa się z bloków oznaczanych takimi nawiasami: {}
W jednym bloku może się znajdować blok, w którym znajduje się blok, w którym ...
Innymi słowy, jeżeli zmienna została zdefiniowana w którymś tam z kolei bloku,
to nie można jej używać w instrukcjach które nie należą do tego bloku.
Przykład:
W przykładzie blok 2 należy do bloku 1 ale nie na odwrót!!! Jest to ta sama zasada co zawieranie
się zbiorów w matematyce.void main()
{ //blok 1
int zmienna1;
for(zmienna1=1 ; zmienna1<10 ;)
{// blok 2
int zmienna2=1
zmienna1++; // tu można użyć tych zmiennych
zmienna2=zmienna1;
}
zmienna1=zmienna2; //błąd zmienna2 nie ma w tym miejscu zasięgu
}
Myślę że za pomocą tego przykładu udało ci się to zrozumieć. Po prostu poza klamrami
gdzie zmienna została zdefiniowana, nie można jej używać.
Jest jeszcze jedna kwestia krórą muszę w tym dziale poruszyć. Chodzi o
zapisywanie liczb. Istnieje kilka systemów w których można zapisywać liczby. C++
obsługuje ósemkowy, dziesiętny i szesnastkowy. Przy zapisie wartości typu int
do zmiennych możemy zapisywać w jednym z tych 3 systemów. Jak je kompilator
rozróżnia. Liczba dziesiętna jest zapisywana normalnie np: 10
Liczba ósemkowa zawsze zaczyna się zerem. np: 017
Liczba szesnastkowa zaczyna się zerem po którym jest litera x lub X, a następnie liczba. np: 0x14
Stałe są to wartości których nie możemy zmienić podczas działania programu. Możemy
nią operować tak jak zmienną ale możemy tylko z niej odczytywać wartość. Jeżeli
spróbujemy coś do niej zapisać jeszcze kompilator przekaże nam błąd. Definiuje się
stałą tak samo jak zmienną z tym że musimy podać wartość ppoczątkową. Np:
Stałe są potrzebne do definicji tablic, ale o tym później.
const int stala1=10
const char stala2='d'
const int stala3[]={1,5,3,8}
Tymi kwantyfikatorami ustalamy czy nasza zmienna będzie przybierała wartości ujemne czy też nie. Jeżeli nie wystąpi żaden z tych kwantyfikatorów to kompilator zakłada domyślnie żę zmienna jest typu signed, czyli posiada wartości ujemne. Przypatrz się na poniższą tabelę i porównaj takie same typy gdzie występuje kwantyfikator unsigned i tam gdzie go niema.
Jest to typ danych. Nie jest on zdefiniowany. Możemy do niego zapisywać wartości, ale musimy najpierw określić rozmiar, i przydzielić pamięć. Wykożystuje się ten typ danych przy funkcjach, jeżeli funkcja nie musi zwracać wartości.
| Nazwa typu | Rozmiar w bajtach | Zkres wartości |
|---|---|---|
| char | 1 | -128 ÷127 |
| int | 2 4 w trybie 32 bit | -32768 ÷ 32767 -2147483648 ÷ 2147483647 |
| short | 2 | -32768 ÷ 32767 |
| long | 4 | -2147483648 ÷ 2147483647 |
| unsigned char | 1 | 0 ÷ 255 |
| unsigned | 2 4 w trybie 32 bit | 0 ÷ 65535 0 ÷ 4294967295 |
| unsigned short | 2 | 0 ÷ 65535 |
| unsigned long | 4 | 0 ÷ 4294967295 |
| enum | 2 | -32768 ÷ 32767 |
| float | 4 | 1,2E-38 ÷ 3,4E+38 dokładność 7 cyfr |
| double | 8 | 2,2E-308 ÷ 1,8E+308 dokładność 15 cyfr |
| long double | 10 | 3,4E-4932 ÷ 1,2E+4932 dokładność 19 cyfr |