Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Pokročilé datové typy (struktury, unie, dynamické proměnné) Přednáška č. 6.

Podobné prezentace


Prezentace na téma: "Pokročilé datové typy (struktury, unie, dynamické proměnné) Přednáška č. 6."— Transkript prezentace:

1 Pokročilé datové typy (struktury, unie, dynamické proměnné) Přednáška č. 6

2 Struktury (structures) (1)  Soubor položek různých typů  Syntaxe deklarace struct t_auto // typ struktura { char znacka[21]; // znacka auta unsigned short rok; // rok vyroby double cena; // cena auta } auto1; // promenna typu struct t_auto struct t_auto auto2; // dalsi promenna typu struct t_auto auto1.rok = 1999; // pristup k clenum struktury auto2.rok = 2001; // pristup k clenum struktury printf("Rok vyroby: %d",auto1.rok);

3 Struktury (structures) (2)  Definice typu pomocí typedef typedef struct { char znacka[21]; // znacka auta unsigned short rok; // rok vyroby double cena; // cena auta } t_auto; // typ t_auto t_auto auto1; // promenna typu t_auto

4 Struktura ve struktuře

5 Unie  Možnost jak do jedné proměnné ukládat více typů  V paměti alokuje tolik místa kolik je zapotřebí pro největší použitý typ  Má význam, potřebujeme-li šetřit místem – bylo aktuální dříve, dnes jen u jednočipových mikropočítačů  Syntaxe deklarace: union t_unie // typ unie { int i; // clen pro pristup k typu int double d; // clen pro pristup k typu double (nejvetsi typ - 8 byte) char c; // clen pro pristup k typu char } U = {'u'}; // promenna typu t_unie a jeji inicializace printf("Char: %c\r\n",U); U.d = 1.5; // pristup k clenum unie, pozor timto se prepise U.c !!! printf("Double: %f\r\n",U); printf("Char: %c\r\n",U); printf("Int: %d\r\n",U);

6 Výčtový typ (enumeration) (1)  Množina striktně definovaných hodnot  Odpovídá typu int, jednotlivým hodnotám jsou přiděleny číselné konstanty, lze tedy použít např. v příkazu switch enum karty {sedma, osma, desitka, kral, eso} karta_1, karta_2; enum karty karta_3; // moznost dalsi promenne typu enum karty int i; karta_1 = osma; i = karta_1; printf("Osma: %d", i); enum karty {sedma = 7, osma, desitka, kral = 20, eso = 30} karta_1, karta_2;

7 Výčtový typ (enumeration) (2)  Příklad s příkazem switch enum days {mo,tu,we,th,fr,sa,su} a_day; switch( a_day) { case mo:...; break; case tu:...; break; case we:...; break; case th:...; break; case fr:...; break; case sa:...; break; case su:...; }

8 Dynamické proměnné (1)  Statické proměnné  Alokaci a uvolnění paměťového místa si řídí sám překladač jazyka  Velikost alokovaného místa musí být definována v době překladu programu  Alokace proměnných na zásobníku, uvolnění na konci bloku/programu  Dynamické proměnné  Alokaci a uvolnění paměťového místa řídí autor programu pomocí funkcí malloc – alokace paměti a free – uvolnění paměti  Velikost alokovaného místa lze za běhu měnit pomocí funkce realloc  Funkce jsou definovány v knihovně  Funkce jsou definovány v knihovně  Paměť je alokována z oblasti tzv. halda (heap) – velkou výhodou je že za běhu programu určujeme kolik místa bude alokováno

9 Dynamické proměnné (2)  Příklad #include int main(int argc, char* argv[]) { double *x, y; x = (double*) malloc( sizeof( double)); // alokace mista v pameti pro // promennou typu double *x = 3.14; // zapis do dynamicke promenne (pres ukazatel) y = *x; // cteni z dynamicke promenne (pres ukazatel) free( x); // uvolneni pameti (parametrem musi byt ukazatel // ktery vratila funkce malloc) printf("Cislo PI: %f", y); getchar(); return 0; }

10 Program  Vytvořte program, který bude pracovat jako databáze automobilů. Každé auto je popsáno značkou a rokem výroby. Údaje o autech jsou ukládány do dynamických proměnných, ukazatelé jsou ukládány do pole. Přidání je aktivováno klávesou A, mazání údajů klávesou D, přehled zadaných položek klávesou P a program je ukončen stiskem Q. V databázi musí zůstat nejméně jeden údaj.


Stáhnout ppt "Pokročilé datové typy (struktury, unie, dynamické proměnné) Přednáška č. 6."

Podobné prezentace


Reklamy Google