Programování (4) Datové typy v jazyce C
Datový typ
určuje pro proměnnou – množinu přípustných hodnot, množinu operaci a velikost v paměti.
Rozdělení
- jednoduché
- celočíselné – celá čísla, znak, enum
- reálné
- void
- strukturované
- pole,řetězec, struktura, union, FILE
Jednoduché
• ordinální (hodnoty tvoří lineárně uspořádanou množinu, tzn. pro každý prvek je přesně definovaný předchůdce i následovníka, z posledního prvku dojde k přetečení na první)
o celočíselné – celá čísla, znaky, enum
o v C++ datový typ bool (logická hodnota)
• číslo s plovoucí desetinnou čárkou
• prázdný datový typ (void) – nemá definovaný rozsah
Strukturované
• homogenní (obsahuje prvky stejného datového typu) – pole, řetězec
• heterogenní (obsahuje prvky různých datových typů) – struktura,
union
Zvláštní
• pointer – statická proměnná obsahující adresu v paměti
Definice jednotlivých datových typů a charakteristika jejich vlastností
• v ANSI C musí být definice uvedena vždy na začátku bloku
Char
char a = ‚K';
• ukládá jeden znak, velikost 8b
• pracuje s čísly odpovídající ASCII tabulce
Celočíselné datové typy
int a = -3;
short b = 6;
long c = 250000;
unsigned int d = 100;
• rozlišujeme znaménkové (signed) – výchozí a neznaménkové (unsigned)
• rozlišují se rozsahem hodnot a velikostí v paměti
Reálné datové typy
float a = 12.5;
double b = 15.12;
long double c = 25.66;
• liší se v rozsahu a přesnosti
Logický datový typ (C++)
bool x = true;
• má 2 hodnoty – pravda (true) a nepravda (false)
• true je jakákoliv nenulová hodnota, nulová hodnota odpovídá false
Definování nových datových typů pomocí typedef
typedef definice_typu nazev;
• pomocí příkazu typedef lze
vytvářet aliasy jiných datových typů (pro zjednodušení použití)
typedef unsigned int uint;
unsigned int a = 30; // dlouhe
uint b = 30; // zkracene
• definice struktur, výčtových typů, unionů – viz Struktura, union a výčet v jazyce C
Charakteristika a deklarace lokálních a globálních proměnných
Globální proměnné
• deklarují se mimo funkce, v hlavičkovém souboru
• paměť se alokuje na začátku programu a uvolňuje na konci (v datové oblasti)
• platnost proměnné je od místa definice do konce souboru
• jsou vždy implicitně inicializovány na nulu
Lokální proměnné
• platnost proměnné je od místadefinice, do konce funkce, ve kteréjsou definovány
• překrývají globální proměnné sestejným názvem
• nejsou implicitně inicializovány –jejich hodnota je vždy náhodná
Typy, charakteristika avýznam paměťových třídv jazyce C
• určují, ve které části paměti budeproměnná kompilátorem umístěna akde všude bude viditelná
Rozdělení paměti
• halda – dynamická data
• zásobník – lokální proměnné,návratové hodnoty funkcí
• datová oblast – globální proměnné
• kódová oblast – kód programu
Třída auto
• automatická paměťová třída
• implicitní pro lokální proměnné
• ukládá proměnnou do zásobníku
• existuje od vstupu do funkce,zaniká při výstupu z funkce
• při každém vstupu do funkce mánáhodnou hodnotu
Třída extern
• implicitní pro globální proměnné
• proměnná je uložena v datové oblasti
• používá se při odděleném překladu, kdy je potřeba, aby více souborů sdílelo tutéž proměnnou
• v jednom souboru je definována bez klíčového slova extern a v ostatních musí být deklarována s klíčovým slovem extern
Třída static
• neexistuje žádná implicitní definice, tzn. klíčové slovo static musí být uvedeno vždy
• proměnné jsou uloženy v datové oblasti
• pro globální proměnné nebo funkce má význam, že jsou viditelné pouze v modulu, kde jsou definovány
• pro lokální proměnné má význam, že si proměnné ponechávají svoji hodnotu mezi jednotlivými voláními funkce
• existuje od prvního volání funkce až do doby ukončení programu
• není přístupná z vnějšku funkce
Třída register
• zajistí uložení proměnné do registru procesoru místo operační paměti, pokud je to možné
• znamená rychlejší přístup k proměnné
• pouze pro lokální proměnné