Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
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("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.
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.