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é