Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilRůžena Sedláčková
1
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 19/10/2017
2
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 19/10/2017
3
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; 19/10/2017
4
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 19/10/2017
5
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 19/10/2017
6
Typ struktura (6) Příklad:
struct osoba petr = {”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 19/10/2017
7
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 19/10/2017
8
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; 19/10/2017
9
Typ struktura (9) Struktura může být: Pozor: Poznámka:
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 19/10/2017
10
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]; definuje pole body, jehož prvky jsou typu bod a 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 19/10/2017
11
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; 19/10/2017
12
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: typedef datový_typ jmTypu; definuje jméno jmTypu jako synonymum pro datový_typ Typ jmTypu lze používat stejným způso-bem jako datový_typ 19/10/2017
13
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]; 19/10/2017
14
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 19/10/2017
15
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; 19/10/2017
16
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 19/10/2017
17
Typ union (2) Definice typu union: union jmTypu {
datový_typ1 id11, id12, …, id1n; datový_typ2 id21, id22, …, id2n; datový_typ2 idm1, idm2, …, idmn; }; Ke složkám unionu se přistupuje rovněž (jako u struktury) pomocí tečkové notace 19/10/2017
18
Typ union (3) Příklad: union konstanta { char c; int i; double x; }; union konstanta 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 19/10/2017
19
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 19/10/2017
20
Typ union (5) Příklad: typedef enum {znak,cele,realne} typHodn; typedef struct { typHodn typ; union konstanta hodnota; } typKonstanta; typKonstanta konst; 19/10/2017
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.