Programování (7) Struktura, union a výčet
Struktura
• struktura je heterogenní datový typ (je složen z libovolného počtu prvků různých
datových typů)
• navenek vystupuje jako jeden objekt
Definice
1. struktura není pojmenována, nedá se využít dále v programu, lze používat pouze definované proměnné
struct {
int vyska;
float vaha;
} pavel, honza, karel;
2. struktura je pojmenována, dá se využít dále v programu
struct miry {
int vyska;
float vaha;
} pavel, honza, karel;
struct miry jan, martin; // definice proměnných
miry jan, martin; // chyba
3. definice struktury jako nový datový typ pomocí příkazu typedef, k definici proměnných není potřeba klíčové slovo struct
typedef struct {
int vyska;
float vaha;
} MIRY;
MIRY pavel, honza, karel;
4. definice pomocí typedef, kdy je struktura pojmenována, používá se, když struktura odkazuje na sebe sama
typedef struct polozka {
int hodnota;
struct položka *dalsi;
} POLOZKA;
Přístup
CLASS první,druhy;
prvni.iq=120;
strcpy(první.jmeno,“Michal“);
scanf(„%d“,&druhy.iq);
gets(druhy.jmeno);
printf(„%s“,druhy.jmeno);
printf(„%c“,druhy.jmeno[2]);
• pole struktur
MIRY lide[100];
lide[50].vyska = 176;
• je možné pracovat s celou strukturou najednou (honza = pavel – kopie celé struktury najednou)
• pole ve struktuře
typedef struct {
int pole[10];
} STR_POLE;
STR_POLE x;
x.pole[1] = 5;
• pointer na strukturu
MIRY *clovek;
clovek = (MIRY*) malloc(sizeof(MIRY));
• přístup k dynamické struktuře
(*clovek).vaha = 70.4; // nebo jednodušeji
clovek->vaha = 70.4;
• inicializace struktury
MIRY a = {190, 84.3};
Union
• vyhradí se paměť pro největší položku ze všech položek v unionu definovaných
• všechny položky unionu se překrývají (ve struktuře by ležely za sebou), tzn. může být v jednom okamžiku použita pouze jedna položka
typedef union {
char c;
int i;
float f;
} TEST;
• union neposkytuje informaci o prvku, který do něj byl naposledy uložen
Enum (výčtový typ)
• slouží k definici seznamu symbolických konstant, které jsou většinou vzájemně závislé
typedef enum {
MODRA, CERVENA, ZELENA, ZLUTA
} BARVY;
BARVY x = MODRA;
• čísluje se implicitně od nuly, lze explicitně inicializovat
typedef enum {
MODRA = 5, CERVENA = 8, ZELENA, ZLUTA = 15
} BARVY; // ZELENA bude mít číslo 9