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