1 / 10

Pokročilé datové typy (struktury, unie, dynamické proměnné)

Pokročilé datové typy (struktury, unie, dynamické proměnné). Přednáška č. 6. Struktury (structures) (1). Soubor položek různých typů Syntaxe deklarace. struct t_auto // typ struktura { char znacka[21]; // znacka auta

Download Presentation

Pokročilé datové typy (struktury, unie, dynamické proměnné)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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ě <stdlib.h> • 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 <stdio.h> #include <stdlib.h> 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.

More Related