www.amapro.cz & David Bazala [Programování]

Otevře webové stránky AmaPro


Otevře hlavní stránku společnosti AmaPro
Internetové stránky určené pro studenty středních a vysokých odborných škol.


amapro.cz/odkazy Projekt eliminuje vyhledávání klíčových slov na komerčních stránkách a v e-schopech.



Nový projekt AmaPro

 

union

 

Je standardní nepříliš používaný příkaz Céčka, který vytváří specifickou datovou oblast. Příkaz union definuje proměnné různých datových typů, které alokují potřebnou paměť takto: překladač zjistí tu proměnnou, která v dané oblasti union zabírá nejvíce místa a alokuje toto místo v paměti. Ukládání hodnot proměnných do této paměti probíhá tzv. přes sebe. Tato paměť je společná pro všechny proměnné v union. Proto se alokovala největší proměnná. Každý zápis a čtení je prováděno na příslušný požadavek formátu datového typu. Zápis proměnné jako int a čtení proměnné jako double generuje výsledky dle aktuálního nastavení oněch alokovaných paměťových buněk.

 

Obecná konstrukce příkazu union

 

union prostor

{

int a; char b,c;double e;

}

prostor MEM;

 

Tato konstrukce definuje paměťovou oblast prostor, kam budou směrovány pokusy ukládat  proměnné a,b,c,d,e. Velikost je odvozená od datově nejnáročnějšího double. Všechny proměnné leží paměťově od stejné adresy (jako by ukazatele). Na vůli programátora záleží, jak nakládat s obsahy Byte a jak je interpretovat.

 

 

PŘÍKLAD: union_1

union prostor                                      //hlavička pro definici prostor jako unionu

   {                                                          //začátek těla příkazu union

   int a;                                                   //vyžaduje minimálně 4 Byte

   double b;                                           //vyžaduje minimálně 8 Byte

   char c[10];                                         //vyžaduje minimálně 10 Byte (bude alokováno)

   };                                                        //konec těla příkazu union

prostor A;                                            //alokace 10 Byte pro A jako union prostor

cout<<A.a<<endl;                              //výpis náhodných hodnot jako int (první 4 Byte)

cout<<A.b<<endl;                              //výpis náhodných hodnot jako double (prvních á  Byte)

cout<<A.c<<endl;                              //výpis náhodných hodnot jako pole charů (po /0)

cout<<"----"<<endl;

A.a=65;                                                 //modifikace paměťového prostoru jako int

cout<<A.a<<endl;                              //výpis aktuální hodnoty proměnné jako int

cout<<A.b<<endl;                              //výpis aktuální hodnoty proměnné jako double

cout<<A.c<<endl;                              //výpis aktuální hodnoty proměnné jako pole charů

cout<<"----"<<endl;

A.b=3.14;                                             //modifikace paměťového prostoru jako double

cout<<A.a<<endl;                              //výpis aktuální hodnoty proměnné jako int

cout<<A.b<<endl;                              //výpis aktuální hodnoty proměnné jako double

cout<<A.c<<endl;                              //výpis aktuální hodnoty proměnné jako pole charů

cout<<"----"<<endl;

strcpy(A.c,"Ahoj Pavle");                //modifikace paměťového prostoru jako pole charů

cout<<A.a<<endl;                              //výpis aktuální hodnoty proměnné jako int

cout<<A.b<<endl;                              //výpis aktuální hodnoty proměnné jako double

cout<<A.c<<endl;                              //výpis aktuální hodnoty proměnné jako pole charů

cout<<"----"<<endl;

getchar();

return 0;

 

Příklad demonstruje způsob zpracování společného datového prostoru union. V definici příkazu union s názvem prostor jsou deklarovány proměnné int, double a pole deseti charů. Překladač alokuje největší požadavek na velikost paměti, což má pole charů. Alokuje 10 Byte. Dále je deklarovaná proměnná A jako union typu prostor. Provede se výpis všech prvků union v jejich formátech, které mají náhodnou hodnotu. Po inicializaci proměnné A.a jako int hodnotou 65, se provede opět výpis logických hodnot prvků A. Pro double a pole charů dojde k vypsání nesmyslných čísel, které jsou vygenerovány funkcí cout dle vstupního datového typu. Provede se inicializace všech prvků dle jejich datového typu. Vždy se ale modifikuje jednaˇspolečná část paměťového prostoru. Tak jak bude cout k 10 Byte přistupovat (tedy dle datového typu), budou přepočítány obsahy Byte na výpis příslušného datového formátu.

 

 

PŘÍKLAD: union_2

typedef enum                                                                      //hlavička pro deklaraci nového výčtového typu den

    {

    PONDELI, UTERY, STREDA, CTVRTEK,                 // 0, 1, 2, 3,

    PATEK, SOBOTA, NEDELE                                        // 4, 5, 6,

    } den;

typedef enum                                                                      //hlavička pro deklaraci nového výčtového typu mesic

    {

    LEDEN, UNOR, BREZEN, DUBEN,             // 0, 1, 2, 3,

    KVETEN, CERVEN, CERVENEC, SRPEN,                  // 4, 5, 6, 7,

    ZARI, RIJEN, LISTOPAD, PROSINEC       // 8, 9, 10, 11

    } mesic;

typedef enum

    {                                                                                        //hlavička pro deklaraci nového výčtového typu rok

    _1998, _1999, _2000, _2001                           // 0, 1, 2, 3

    }rok;

typedef union                                                                     //hlavička pro definici předefinovaného unionu

    {

    rok R;                                                                //položka R jako typ výčtu rok

    mesic M;                                                                          //položka M jako typ výčtu mesic

    den D;                                                              //položka D jako typ výčtu den

    } pamet;                                                                           //synonymum s názvem paměť pro nový union

 

typedef struct                                                                     //hlavička pro definici předefinované struktury

    {

     pamet MEM;                                                                  //prvek MEM jako union pamet

     rok RR;                                                            //prvek RR jako typ výčtu rok

     mesic MM;                                                                     //prvek MM jako typ výčtu mesic

     den DD;                                                                          //prvek MM jako typ výčtu den

    } datum;                                                                           //název synonyma struktury pro typedef

 

datum DAVID;                                                                   //deklarace proměnné DAVID jako strukturu datum

DAVID.MEM.R=_1998;                                                    //inicial. prvku MEM jako union oblasti položky výčtu R

DAVID.MEM.M=LEDEN;                                                //inicial. prvku MEM jako union oblasti položky výčtu M

DAVID.MEM.D=STREDA;                                             //inicial. prvku MEM jako union oblasti položky výčtu D

DAVID.RR=_2001;                                             //inicial. prvku RR jako typ výčtu rok

DAVID.MM=PROSINEC;                                                //inicial. prvku MM jako typ výčtu mesic

DAVID.DD=NEDELE;                                                       //inicial. prvku DD jako typ výčtu den

//******************************************

//výstup inicializovaných hodnot na obrazovku

//******************************************

cout<<DAVID.MEM.R<<endl;                                       //interpretováno jako 2 (DAVID.MEM.D=STREDA)

cout<<DAVID.MEM.M<<endl;                                      //interpretováno jako 2 (DAVID.MEM.D=STREDA)

cout<<DAVID.MEM.D<<endl;                                       //zůstává 2 z posledního DAVID.MEM.D=STREDA

cout<<DAVID.RR<<endl;                                                // 3 jako _2001

cout<<DAVID.MM<<endl;                                             // 11 jako PROSINEC

cout<<DAVID.DD<<endl;                                               // 6  jako NEDELE

getchar();

return 0;

 

Příklad demonstruje spojení příkazu union s příkazy struct a enum. Jsou definována tři nové výčtové typy den, mesic a rok. Dále je definovaná datová oblast union pamet, která alokuje v paměti potřebné místo. Pravděpodobně alokuje 1 Byte, který je pro náš případ dostačující. Příkaz struct definuje novou strukturu s předefinovaným názvem datum. Zde jsou definovány čtyři prvky. První prvek MEM je deklarován jako typ union pamet. Ostatní 3 prvky jsou deklarovány jako výčtové typy den, mesic a rok. Dále je deklarace proměnné DAVID jako struktury datum. Dojde k alokaci potřebné paměti. Pravděpodobně se alokují 4 Byte, (1B=enum rok, 1B=enum mesic, 1B=enum den, 1B=union pamet). Dochází k inicializaci proměnných, která ale proběhne taktu. Zápis do paměťové buňky typu union bude přepisováno a skončí posledním zápisem do této buňky. Tedy DAVID.MEM.D=STREDA; zapíše hodnotu 2 (jako STREDA). Inicializace prvků RR, MM a DD se vztahuje k jedinečným paměťovým buňkám. Výsledek inicializace vypíše cout pro všechny prvky struktury proměnné DAVID.

 

 



Abecední seznam všech článků Vyhledání pojmů ve článcích




OnLine televize
Seznam světových on line televizních vysílání
internet/katalog_internetove_televize
JavaScript - ukázky
Příklady užití některých často používaných efektů na stránky.
katalogy/javascript
Programování PHP
Články o programování webových stránek pomocí PHP.
internet/katalog_programovani_php
CSS html vlasnosti
Přehled CSS vlastností pro tvorbu webu
datove_zdroje/stranky/css
Odkazník o programování
Rejstřík klíčových slov pro programování ve vyhledávačích.
programovani/programovani.php
Databáze obrázků
Malé a velké obrázky, podlkady, tlačítka, okrasné čáry a pod.
datove_zdroje/obrazky
Animované obrázky
Animované gify a malé obrázky pro všeobecné využití.
datove_zdroje/animace
Zapojení kabelů
Popis vývodů a křížení různých propojovacích kabelů
konektory.php
Databáze ikon
Ikony a malé obrázky pro tlačítka či jiné použití
datove_zdroje/icony/icony.php
Otevře stránky Fulltextové vyhledávání na celém serveru
Digitalizované odborné knihy
Velká encyklopedie pojmů a zkratek
Česko - anglicko - německý technický slovník
Klasický katalog firem, služeb a stránek
OnLine překladač  vět a textů (nepoužívá Google)
Stránky pro chvíle oddechu od studia, relaxace
Katalog českých firem dle technologií
Internetový odkazník
Otevře hlavní stranu pro oddíl programování




 Wikipedie   Seznam stránek   Kapitoly témat   Významné servery   Klíčová slova 








Otevře hlavní stranu společnosti AmaPro

Všechna práva vyhrazena. Určeno jen pro osobní využití. Bez předchozího písemného souhlasu správce www.amapro.cz je zakázána jakákoli další publikace, přetištění nebo distribuce jakéhokoli materiálu nebo části materiálu zveřejněného na www.amapro.cz a to včetně šíření prostřednictvím elektronické pošty. Články, jejichž přímým autorem není amapro.cz lze publikovat pouze se souhlasem jejich majitelů či administrátoru příslušného webu.