Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
C/C++
Učíme se C (13.díl)
12. prosince 2000, 00.00 | Struktury, možné způsoby deklarace, definice proměnných, inicializace při definici a příkaz
typedef.
Typ struktura patří mezi tzv. složené datové typy. Strukturu si můžeme představit jako jakýsi obal, který sdružuje více položek různých typů do jednoho celku. Jako příklad si můžeme vzít databázi osob, kde jsou pro každou jednotlivou osobu uloženy, kromě jména, i údaje o věku a výšce. Takovýto záznam pak můžeme implementovat pomocí struktury, která bude obsahovat příslušné položky. Jméno osoby uložíme do řetězce, pro věk postačí typ unsigned char a pro výšku zvolíme typ float. Nyní tedy můžeme přejít k vlastní deklaraci požadované struktury.
|
Klíčovým slovem struct uvozujeme vlastní deklaraci těla struktury. To je tvořeno dvojicí složených závorek, mezi kterými jsou deklarovány jednotlivé položky struktury tak, jako bychom definovali proměnné.
Nyní tedy máme nadeklarovanou strukturu, ale nemáme žádnou proměnnou, jejímž typem by tato struktura byla. Chceme-li tedy nějakou takovou proměnnou definovat, uděláme to stejně jako u ostatních datových typů - zápisem, kdy před identifikátor proměnné uvedeme její typ. U struktur je ale typem celý zápis, jak jsme si ho uvedli výše, proto bude definice proměnné clovek vypadat následovně:
|
Pokud bychom chtěli definovat více proměnných, jednoduše uvedeme více identifikátorů navzájem oddělených čárkou. Jestliže ale budeme chtít vytvořit proměnnou stejného typu na jiném místě programu, museli bychom znovu jako typ uvést celou strukturu i se všemi jejími členy. To je ovšem příliš nepohodlné a navíc by tyto struktury nebyly vzájemně kompatibilní, přestože jejich vnitřní struktura by byla stejná. Proto můžeme samotnou strukturu označit identifikátorem, který uvedeme mezi klíčovým slovem struct a vlastním tělem struktury. My zvolíme za identifikátor označující naši strukturu slovo osoba.
|
I v tomto případě můžeme ihned definovat proměnné uvedením jejich identifikátoru před závěrečným znakem středníku. Nyní ale, díky označení struktury jejím identifikátorem, můžeme proměnnou clovek definovat i na jiných místech programu takto:
|
Nezapomínejte, že nestačí použít jenom identifikátor struktury (osoba), ale že ho ještě musí předcházet klíčové slovo struct. Existuje ale ještě jeden způsob, jak si práci se strukturami zjednodušit, a to pomocí příkazu typedef.
Příkaz typedef
Pomocí příkazu typedef můžeme v C vytvářet nové datové typy, nebo spíše jakési aliasy jiných typů. Například, chceme-li vytvořit nový datový typ uint, který bude odpovídat typu unsigned int, využijeme typedef takto:
|
Použití je patrné. Mezi klíčové slovo typedef a zvolený identifikátor nového datového typu (v našem případě uint) jednoduše vepíšeme typ, kterému má být nový typ ekvivalentní. Celý zápis pak zakončíme středníkem. Dále v programu místo typu unsigned int můžeme používat nově vytvořený typ uint:
|
Pro takto jednoduché zápisy se typedef příliš nepoužívá, ale v jazyce C existují i mnohem složitější zápisy typů, pro které již má použití typedef smysl. Jedním takovým případem je použití při deklaraci struktury.
Definice struktury s použitím typedef
Vezměme si opět naši známou strukturu a nadefinujme ji s pomocí příkazu typedef.
|
Identifikátor OSOBA teď označuje celou strukturu i s klíčovým slovem struct. Pojmenování struktury (slovem osoba za klíčovým struct) bylo v tomto případě zcela zbytečné a je tedy možné jej vynechat. Jak ale později uvidíme, bude se tento zápis hodit při definování ukazatele na strukturu, který je sám prvkem této struktury. Ale o tom až někdy jindy. Máme-li tedy strukturu nadeklarovanou, definice proměnné clovek by vypadala takhle:
|
Inicializace prvků struktury při její definici
I jednotlivé prvky struktury je možné inicializovat již při definici. To uděláme tak, že za identifikátor proměnné následovaný rovnítkem uvedeme ve složených závorkách seznam inicializačních hodnot. Pořadí a typy těchto hodnot pak musí odpovídat tomu, jak jsou položky struktury deklarovány. Inicializaci si opět předvedeme na naší struktuře OSOBA:
|
Struktura ve struktuře
Prvkem struktury samozřejmě může být i jiná, dříve deklarovaná, struktura. Zkusme nyní vytvořit strukturu ADRESA, kterou přidáme mezi prvky struktury OSOBA.
|
Možná teď přemýšlíte, zda je možné inicializovat při definici i prvky vnořené struktury. Je to možné. Stačí uvést, jako inicializátor příslušného prvku typu struktura další seznam inicializačních výrazů, jak to ukazuje následující příklad.
|
Práce se strukturou
Práce se strukturou je velice jednoduchá. K jednotlivým prvkům struktury přistupujeme, jak je obvyklé i v jiných jazycích, pomocí tzv. tečkové notace. Zápisem clovek.jmeno se tedy dostaneme k prvku jmeno proměnné clovek. Lépe to ukáže následující příklad, který z pole struktur OSOBA vypíše jména všech lidí, kterým je alespoň osmnáct let.
|
Na rozdíl od polí, struktury se mohou navzájem přiřazovat přímo:
|
Obsah seriálu (více o seriálu):
- Učíme se C (1. díl)
- Učíme se C (2. díl)
- Učíme se C (3.díl)
- Učíme se C (4. díl)
- Učíme se C (5.díl)
- Učíme se C (6.díl)
- Učíme se C (7.díl)
- Učíme se C (8.díl)
- Učíme se C (9.díl) - Řetězce
- Učíme se C (10.díl) - Vstupně výstupní funkce
- Učíme se C (11.díl) - Formátovaný výstup
- Učíme se C (12.díl) - Formátový specifikátor
- Učíme se C (13.díl)
- Učíme se C (14.díl) - Vícerozměrná pole
- Učíme se C (15.díl) - Ukazatele
- Učíme se C (16.díl) - Modifikátory paměťové třídy
- Učíme se C (17.díl) - Pole a ukazatel
- Učíme se C (18. díl) - Dynamická alokace paměti
- Učíme se C (19. díl) - Práce se soubory I.
- Učíme se C (20. díl) - Práce se soubory II.
- Učíme se C (21. díl) - Parametry funkce main()
- Učíme se C (22. díl) - Ukazatele na funkce
- Učíme se C (23. díl) - Složité deklarace a definice
- Učíme se C (24. díl) - Funkce s proměnným počtem parametrů
- Učíme se C (25. díl) - Bitové operátory a bitové pole
- Učíme se C (26. díl) - Datové typy enum a union
- Učíme se C (27. díl - závěr) - Programové moduly
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007