Typy zmiennych i ich rozmiary


zmienne.c

Jeszcze nie ma tego opisu.. Jutro coś dorzucę :)

Aby program nie był statycznym, ciągle powtarzającym się zestawem np. tych samych zdań, liczb, wypowiedzi, reakcji.. to wprowadza się do niego "zmienne", czyli takie cosie, które mogą zmieniać swoją zawartość w trakcie działania programu. Mogą to być liczby, znaki lub całe zdania.

Zmienne mogą mieć różne zastosowania, możecie trzymać w nich dane np. imię, które później możecie zmienić na inne. Mogą tam być liczby, które są wynikami obliczeń matematycznych. Zmienne są też pomocne, gdy chcecie wykonać daną część programu tylko wtedy, gdy zmienna ma wartość konkretną np. gdy a = 2, ale gdy a = 3 to już robicie coś innego..

Dzięki zmiennym program zyskuje na dynamice (w połączeniu z if else o których będzie innym razem), daje możliwość tworzenia baz danych, tymczasowego gromadzenia wyników z obliczeń, które można później porównywać z innymi obliczeniami czy założeniami. Do zmiennych można wrzucić dane odebrane od usera czy też z sieci (poprzez socket) i obrabiać je później według własnych potrzeb.

Naukę programowania zacznijcie od poznania zmiennych a następnie wskaźników :) gdyż wszystko, co będziecie pisać, nawet prosty printf() będzie związane jak nie ze zmienną to ze wskaźnikiem (przekazywanie argumentów do funkcji) :)

Aby korzystać ze zmiennej - trzeba ją najpierw zadeklarować. To, jak ją zadeklarujemy zależy od tego, jakiej zmiennej potrzebujemy. Jeśli w programie będziemy operować na liczbach całkowitych, nie za dużych.. to najlepszym rozwiązaniem jest zastosowanie zmiennej typu integer (int).

Deklaracja zmiennej w programie na przykładzie int
int main (void)
{
    int a;
    /* program costam sobie robi dalej */
}

int (integer) - liczba całkowita, ze znakiem

po typie zmiennej piszemy nazwę, której będziemy używać w programie

    int a;

Oznacza to, że zadeklarowana została zmienna o nazwie "a" i jest ona typu
integer - całkowita, ze znakiem.

Deklaracja oznacza tyle, że program zarezerwował sobie miejsce w pamięci
na naszą zmienną. Od typu zmiennej zależy, ile pamięci zostało zarezerwowane.
Dla typu int są to 4 Bajty.

Sprawdźmy to:

int main (void)
{
    int a;
    printf("%d Bytes\n", sizeof(a));
    return 0;
}

Wynik:

    4 Bytes

Deklarując zmienną (tworząc ją), możemy od razu nadać jej konkretną wartość.

    int a = 55;

Oznacza to, że program zarezerwował sobie 4 Bajty i wpisał w nie wartość 55.
Nasza zmienna będzie mieć nazwę "a" :)
Z punktu widzenia wykonywania programu, nie jest istotna nazwa zmiennej,
równie dobrze możemy nazwać ją "dupa" i program będzie działał i nie pogniewa
się na nas ;D Nazwa jest tylko dla nas i dla kompilatora, żeby ułatwić
pisanie programu i nie operować na adresach pamięci bezpośrednio.
Zerknijcie na opis o adresach zmiennych.
Każda zmienna posiada swój adres w pamięci, a my deklarując zmienną
przypisujemy sobie nazwę, która ułatwi nam programowanie.

Ważną rzeczą są też zakresy zmiennych. Przedstawiony powyżej typ int będzie
dobry, gdy potrzebujemy liczb z zakresu od -2147483648 do 2147483647.

*** Zakresy zmiennych znajdziecie w pliku /usr/include/limits.h ***

Zakres ściśle zależy od rozmiaru zmiennej. Dla int sa to 4 Bajty.
Przeliczcie sobie, jaką największą liczbę można by było zapisać na
4 Bajtach.. 11111111111111111111111111111111 hmm
Ale.. że ustalono dla int przedział, by znalazły się w nim liczby dodatnie
i ujemne to podzielono maksymalną możliwą liczbę na 2 :)

    11111111111111111111111111111111 = 4294967295

    przesuńmy w prawo 1 bit

    01111111111111111111111111111111 = 2147483647

Ten jeden bit będzie dla oznaczenia czy liczba jest dodatnia czy ujemna :)
(żeby nie wnikać w kody uzupełnieniowe to poprzestańmy na zaufaniu
do /usr/include/limits.h) :P
Dodam tylko jeszcze jedno:

    maksymalna liczba ujemna -2147483648
    maksymalna liczba dodatnia 2147483647

Różnica o 1 bierze się stąd, że liczba 0 brana jest jako dodatnia :)
Mamy więc tyle samo liczb dodatnich co ujemnych (to tak aby rozwiać wszelkie
wątpliwości).

Czas poznać inne typy....

Ale o tym kiedy indziej :)
(jeżeli wypisałam tu jakieś herezje to bardzo proszę o poprawienie mnie :))


		    c. d. n.


Na kiedyśtam dalszy opis do:

int main ( void )
{
    int a = 55;
    unsigned int u = 66;
    long int l = 100;
    float f = 10002;
    double d = 200031337;
    char znak = 122;
    char tablica[] = "Aqq";
    
    printf("int a: %d  [%d Bytes]\n", a, sizeof(a));
    printf("unsigned int u: %u  [%d Bytes]\n", u, sizeof(u));
    printf("long l: %ld  [%d Bytes]\n", l, sizeof(l));

    printf("float f: %f  [%d Bytes]\n", f, sizeof(f));
    printf("double d: %f  [%d Bytes]\n", d, sizeof(d));

    printf("char znak: %c  [%d Bytes]\n", znak, sizeof(znak));

    printf("tablica: %s  [%d Bytes]\n", tablica, sizeof(tablica));

    return 0;
}


Neutrinka
www.kwant.info