Typ struktura 1 Datov typ struktura struct je

  • Slides: 20
Download presentation
Typ struktura (1) • Datový typ struktura (struct) je agregovaný heterogenní datový typ •

Typ struktura (1) • Datový typ struktura (struct) je agregovaný heterogenní datový typ • Jedná se o skupinu několika proměnných, které mohou mít různé datové typy, spojených pod jediné jméno • Struktury pomáhají organizovat „komplikovaná“ data • Umožňují pracovat se skupinou příbuzných proměnných jako s jedním objektem 2021 -10 -24 1

Typ struktura (2) • Definice typu struktura: struct jm. Typu { datový_typ 1 id

Typ struktura (2) • Definice typu struktura: struct jm. Typu { datový_typ 1 id 11, id 12, …, id 1 n 1; datový_typ 2 id 21, id 22, …, id 2 n 2; datový_typm idm 1, idm 2, …, idmnm; }; • Identifikátor jm. Typu se nazývá jmenovka struktury a lze jej následně využít pro definici proměnných 2021 -10 -24 2

Typ struktura (3) • Proměnné idij se nazývají složky (položky) struktury • Příklad: struct

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 jm. Typu p 1, p 2, …, pn; 2021 -10 -24 3

Typ struktura (4) • Identifikátory p 1, p 2, …, pn označují proměnné typu

Typ struktura (4) • Identifikátory p 1, p 2, …, pn označují proměnné typu jm. Typu • 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 identifikátory odpovídajících proměnných 2021 -10 -24 4

Typ struktura (5) • Příklad: struct { char autor[30], nazev[50]; unsigned short rok. Vydani;

Typ struktura (5) • Příklad: struct { char autor[30], nazev[50]; unsigned short rok. Vydani; } kniha 1, kniha 2; • 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 2021 -10 -24 5

Typ struktura (6) • Příklad: struct osoba petr = {”Petr”, ”Novak”, 30}, pavel =

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 2021 -10 -24 6

Typ struktura (7) • Se složkami typu struktura je možné pracovat stejným způsobem jako

Typ struktura (7) • Se složkami typu struktura je možné pracovat stejným způsobem jako s proměnnými odpoví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 2021 -10 -24 7

Typ struktura (8) • Lze např. použít přiřazovací příkaz, který zkopíruje obsah jedné struktury

Typ struktura (8) • Lze např. použít přiřazovací příkaz, který zkopíruje obsah jedné struktury do struktury druhé (obě proměnné musí být téhož typu): struct bod { int x, y; }; struct bod 1 = {20, 50}; struct bod 2; bod 2 = bod 1; 2021 -10 -24 8

Typ struktura (9) • Struktura může být: – uvedena jako návratová hodnota funkce –

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 2021 -10 -24 9

Typ struktura (10) • Struktury je rovněž možné používat v kombinaci s poli, tj.

Typ struktura (10) • Struktury je rovněž možné používat v kombinaci s poli, tj. lze definovat: – struktury, jejichž složky jsou typu pole – pole, jehož prvky jsou typu struktura: • příklad: struct 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 2021 -10 -24 10

Typ struktura (11) • Příklad: struct obdelnik { struct bod lh. Roh, pd. Roh;

Typ struktura (11) • Příklad: struct obdelnik { struct bod lh. Roh, pd. Roh; }; struct obdelnik obr; obr. lh. Roh. x = 1; obr. lh. Roh. y = 1; obr. pd. Roh. x = 80; obr. pd. Roh. y = 25; 2021 -10 -24 11

Pojmenovaný typ (1) • Jazyk C poskytuje nástroj pro vytváření jmen datových typů •

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 jm. Typu; definuje jméno jm. Typu jako synonymum pro datový_typ • Typ jm. Typu lze používat stejným způsobem jako datový_typ 2021 -10 -24 12

Pojmenovaný typ (2) • Příklad: typedef unsigned long delka; definuje typ delka, který odpovídá

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]; 2021 -10 -24 13

Pojmenovaný typ (3) • Příklady: – typedef int * p. Int; p. Int a,

Pojmenovaný typ (3) • Příklady: – typedef int * p. Int; p. Int a, b; definuje proměnné a a b jako ukazatele na hodnoty 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 2021 -10 -24 14

Pojmenovaný typ (4) • Definice pojmenovaných typů se často používá také při definici typů

Pojmenovaný typ (4) • Definice pojmenovaných typů se často používá také při definici typů struktura: typedef struct bod { int x, y; } typ. Bod; typedef struct obdelnik { typ. Bod lh. Roh, pd. Roh; } typ. Obdelnik; typ. Obdelnik obr; 2021 -10 -24 15

Typ union (1) • Datový typ union umožňuje v různých chvílích uchovávat hodnoty rozličných

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řekrý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 2021 -10 -24 16

Typ union (2) • Definice typu union: union jm. Typu { datový_typ 1 id

Typ union (2) • Definice typu union: union jm. Typu { datový_typ 1 id 11, id 12, …, id 1 n 1; datový_typ 2 id 21, id 22, …, id 2 n 2; datový_typm idm 1, idm 2, …, idmnm; }; • Ke složkám unionu se přistupuje rovněž (jako u struktury) pomocí tečkové notace 2021 -10 -24 17

Typ union (3) • Příklad: union konstanta { char c; int i; double x;

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 2021 -10 -24 18

Typ union (4) • Kapacita paměti, na které jsou uloženy hodnoty typu union, je

Typ union (4) • Kapacita paměti, na které jsou uloženy hodnoty 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 2021 -10 -24 19

Typ union (5) • Příklad: typedef enum {znak, cele, realne} typ. Hodn; typedef struct

Typ union (5) • Příklad: typedef enum {znak, cele, realne} typ. Hodn; typedef struct { typ. Hodn typ; union konstanta hodnota; } typ. Konstanta; typ. Konstanta konst; 2021 -10 -24 20