200 likes | 357 Views
Typ struktura (1). Datový typ struktura ( struct ) je agrego-vaný heterogenní datový typ Jedná se o skupinu několika proměnných, které mohou mít různé datové typy, spoje-ných pod jediné jméno Struktury pomáhají organizovat „kompliko-vaná“ data
E N D
Typ struktura (1) • Datový typ struktura (struct) je agrego-vaný heterogenní datový typ • Jedná se o skupinu několika proměnných, které mohou mít různé datové typy, spoje-ných pod jediné jméno • Struktury pomáhají organizovat „kompliko-vaná“ data • Umožňují pracovat se skupinou příbuzných proměnných jako s jedním objektem
Typ struktura (2) • Definice typu struktura:struct jmTypu{ datový_typ1 id11,id12,…,id1n1;datový_typ2 id21,id22,…,id2n2; datový_typm idm1,idm2,…,idmnm;}; • Identifikátor jmTypu se nazývá jmenovka struktury a lze jej následně využít pro defi-nici proměnných
Typ struktura (3) • Proměnné idij se nazývají složky (položky) struktury • Příklad:struct osoba{char jmeno[15],prijmeni[20];unsigned short vek;}; • Na základě definovaného typu struktura je možné později definovat proměnnéstruct jmTypu p1,p2,…,pn;
Typ struktura (4) • Identifikátory p1,p2,…,pn označují pro-měnné typu jmTypu • Příklad:struct osoba petr,pavel;definuje proměnné petr a pavel, které jsou typu osoba • Poznámky: • jmenovka struktury může být v době definice vynechána • za definicí struktury mohou následovat identifi-kátory odpovídajících proměnných
Typ struktura (5) • Příklad: struct{char autor[30],nazev[50];unsigned short rokVydani;} kniha1,kniha2; • Složky struktury mohou být v době definice také nastaveny na své iniciální hodnoty • Poznámka: • iniciální hodnoty musí být konstantní výrazy
Typ struktura (6) • Příklad: struct osobapetr={”Petr”,”Novak”,30},pavel={”Pavel”,”Novy”,40}; • Jednotlivé složky struktury lze zpřístupnit pomocí tzv. tečkové notace: • identifikátor proměnné typu struktura • symbol tečka • identifikátor složky struktury
Typ struktura (7) • Se složkami typu struktura je možné pracovat stejným způsobem jako s proměnnými odpo-vídajícího datového typu • Příklad: strcpy(petr.jmeno,”Petr”);strcpy(petr.prijmeni,”Novak”);petr.vek=30; • Jazyk C umožňuje pracovat najednou s celou strukturou
Typ struktura (8) • Lze např. použít přiřazovací příkaz, který zko-píruje obsah jedné struktury do struktury dru-hé (obě proměnné musí být téhož typu):struct bod{int x,y;};struct bod bod1={20,50}; struct bod bod2; bod2=bod1;
Typ struktura (9) • Struktura může být: • uvedena jako návratová hodnota funkce • předána funkci jako skutečný parametr volaný hodnotou • Pozor: • jsou-li definovány dvě struktury se stejnými slož-kami stejných datových typů, pak se chovají jako dva různé nekompatibilní datové typy • Poznámka: • složka struktury, jmenovka struktury a proměnná mohou mít stejný identifikátor, aniž by docházelo ke konfliktům
Typ struktura (10) • Struktury je rovněž možné používat v kombi-naci s poli, tj. lze definovat: • struktury, jejichž složky jsou typu pole • pole, jehož prvky jsou typu struktura: • příklad:struct bod body[20];definujepole body, jehož prvky jsou typu boda pro jejichž zpřístupnění lze použít např.:body[0].x=10; body[0].y=20; • Struktury mohou být do sebe vnořovány, tj. složky typu struktura mohou být opět typu struktura
Typ struktura (11) • Příklad:struct obdelnik{struct bod lhRoh,pdRoh;};struct obdelnik obr; obr.lhRoh.x=1;obr.lhRoh.y=1;obr.pdRoh.x=80;obr.pdRoh.y=25;
Pojmenovaný typ (1) • Jazyk C poskytuje nástroj pro vytváření jmen datových typů • Pojmenované typy lze vytvářet pomocí klí-čového slova typedef • Obecný tvar:typedefdatový_typ jmTypu;definuje jméno jmTypu jako synonymum pro datový_typ • TypjmTypu lze používat stejným způso-bem jako datový_typ
Pojmenovaný typ (2) • Příklad:typedef unsigned long delka;definuje typ delka, který odpovídá typu unsigned long • Typ delka je možné dále využít např. pro definici proměnných • Příklad:delka x,y,z;delka delky[10];
Pojmenovaný typ (3) • Příklady: • typedef int *pInt;pInt a,b;definuje proměnné a a b jako ukazatele na hod-noty datového typu int • typedef int matice[2][3];matice m;definuje proměnnou m jako dvourozměrné pole, které má dva řádky a tři sloupce • typedef int radek[3];typedef radek matice[2];matice m;definuje proměnnou m jako dvourozměrné pole, které má dva řádky a tři sloupce
Pojmenovaný typ (4) • Definice pojmenovaných typů se často po-užívá také při definici typů struktura:typedef struct bod{int x,y;} typBod; typedef struct obdelnik{ typBod lhRoh,pdRoh;} typObdelnik;typObdelnik obr;
Typ union (1) • Datový typ union umožňuje v různých chví-lích uchovávat hodnoty rozličných typů a velikostí • Hodnoty(složky) unionu se vzájemně pře-krývají (sdílí stejné paměťové místo) • Uniony umožňují manipulovat s různými typy dat v jedné oblasti paměti • Jejich použití bývá méně obvyklé • Syntaxe unionu je velmi podobná syntaxi struktury
Typ union (2) • Definice typu union:union jmTypu{ datový_typ1 id11,id12,…,id1n1;datový_typ2 id21,id22,…,id2n2; datový_typm idm1,idm2,…,idmnm;}; • Ke složkám unionu se přistupuje rovněž (jako u struktury) pomocí tečkové notace
Typ union (3) • Příklad:union konstanta{char c;int i;double x;};unionkonstanta k; • Proměnná k obsahuje tři složky (c, i a x), které jsou různých typů a sdílejí společné paměťové místo
Typ union (4) • Kapacita paměti, na které jsou uloženy hod-noty typu union, je dána největší složkou, jež je v unionu definována • Union neposkytuje informaci o typu prvku, který do něj byl naposledy uložen • Zmíněný problém je možné vyřešit tak, že se union vloží do struktury, jejíž: • první složka je výčtový typ • druhá složka je union
Typ union (5) • Příklad:typedefenum {znak,cele,realne} typHodn;typedef struct{ typHodn typ;unionkonstanta hodnota;} typKonstanta;typKonstanta konst;