Elektronika - baza wiedzy

Cześć 3 kursu C/C++


3. Typy danych


W języku C są cztery podstawowe proste typy danych: znak, liczba całkowita, liczba rzeczywista i typ bezwartościowy. Typy te można nieco zmodyfikować poprzez dodanie przy deklaracji następujących słów: "signed", aby uzyskać liczbę ze znakiem (jest to ustawienie domyślne); "unsigned", aby uzyskać liczbę bez znaku; "short", aby zmniejszyć wielkość zmiennej (ale zmniejszeniu ulega także zakres); "long", aby zwiększyć wielkość zmiennej (zwiększeniu ulega zakres, ale zmienna zajmuje więcej miejsca w pamięci).

Poniższa tabela zawiera wspomniane typy:


Typ
Zakres
Wielkość (w bajtach)
Uwagi

char
całkowity
-128..127
1


unsigned char
całkowity
0..255
1


int
całkowity
-2^31..2^31-1
4
Na kompilatorach 16 bitowych ma 2 bajty

unsigned int
całkowity
0..2^32
4
Na kompilatorach 16 bitowych ma 2 bajty

short int
całkowity
-32768..32767
2


unsigned short int
całkowity
0..65535
2


long int
całkowity
-2^31..2^31-1
4


unsigned long int
całkowity
0..2^32
4


float
rzeczywisty
6 znaków precyzji
4


double
rzeczywisty
10 znaków precyzji
8



Jak widać w przypadku wielkość zmiennej mierzona w bajtach jest wprost proporcjonalna do zakresu danych, jaki może ona przechowywać. Dla zmiennych całkowitych zakres ten wynosi od 0 do 2^n (w przypadku liczb bez znaku), lub od -2^n do 2^n-1 (w przypadku liczb ze znakiem), gdzie n to ilość _bitów_ na których zapisana jest zmienna. Dla przypomnienia: jeden bajt ma osiem bitów...

Deklaracja zmiennej wygląda tak:

typ_danych nazwa_zmiennej; (czyli dokładnie odwrotnie niż w Pascalu, w którym było: "nazwa_zmiennej : typ_danych;")


Czyli, jeśli chcemy zadeklarować zmienną znakową o nazwie "znak" to robimy to w ten sposób:

char znak;

W tym miejscu muszę także przedstawić jeden z ważniejszych operatorów języka C (pozostałe zostaną opisane w następnych punktach). Jest to oczywiście operator przypisania "=". Zapewne już wiesz do czego on służy, ale dla dopełnienia formalności napiszę, że przypisuje wartość wyrażenia z lewej strony do zmiennej umiejscowionej po prawej jego stronie. Operator ten to oczywiście odpowiednik Pascalowego ":=". Od razu przedstawię praktyczne jego zastosowanie - zadeklarujemy zmienna taką, jak w powyższym przykładzie i przypiszemy jej wartość początkową:

char znak=´A´;

Konstrukcja taka nie występuje w Pascalu, gdzie blok deklaracji zmiennych jest wydzielony i trzeba do osiągnięcia tego samego celu wpisać dwie linijki kodu.


Deklaracja zmiennej całkowitej o nazwie "dlugosc" (wraz z przypisaniem jej wartości początkowej) wygląda tak:

unsigned long int dlugosc=5;


Natomiast deklaracja zmiennej rzeczywistej o nazwie "pole" (wraz z przypisaniem jej wartości początkowej) tak:

float pole=3.48;

Jak widzimy w powyższym przykładzie część całkowitą oddzielamy od części ułamkowej przy pomocy kropki, nie przecinka !


Tutaj ważna uwaga. Deklaracja wszystkich zmiennych musi być wpisana na logicznego początku bloku programu (czyli zaraz za znakiem { , który to taki blok rozpoczyna). Zmienna taka jest lokalna, czyli jest dostępna tylko wewnątrz bloku, w którym jest zadeklarowana.

Do omówienia pozostał jeszcze typ bezwartościowy - jak się zapewne domyślacie, jest to wspomniane w poprzednim punkcie "void". Nie jest to typ danych w ścisłym tego słowa znaczeniu ponieważ nie można utworzyć zmiennej tego typu (można jednak utworzyć zmienną typu wskaźnik na void, ale to omówię gdzieś pod koniec tego kursu). Służy on głownie do deklaracji, że funkcja nie zwraca lub też nie przyjmuje żadnych danych. Czyli przykład z pierwszego punktu:

void main(void)

można przetłumaczyć jako informację dla kompilatora, że chcemy zdefiniować funkcję o nazwie "main", która nie zwraca żadnej wartości oraz nie przyjmuje żadnych parametrów.

Jeśli na razie coś nie jest jasne to się nie martw, w następnym punkcie przedstawię jeszcze podstawowe operatory arytmetyczne i wreszcie będziemy już mogli napisać swój pierwszy program, w którym pokażę praktyczne zastosowanie przestawionych rzeczy. A dobry przykład jest lepszy niż tysiąc słów....