Struktura a unie
Struktura a sběr dat jsou uživatelsky definované datové typy v jazyku C a jsou koncepčně stejné, avšak v některých ohledech se stále liší, jako je způsob přidělování paměti jejich členům. Jsou deklarovány podobně, ale fungují jinak. Umožňují uživateli kombinovat různé typy dat pod jediným názvem. Zatímco při deklaraci strukturálních proměnných je použito samostatné paměťové místo pro jednotlivé členy, různé členy odborové proměnné sdílejí stejné paměťové místo. Podívejme se na rozdíl mezi strukturou a jednotou.
Co je Struktura?
Struktura je pouze jiný uživatelsky definovaný typ dat v jazyce C, který umožňuje uživateli kombinovat datové typy různých typů do jednoho typu v bloku paměti. Struktura může obsahovat jak jednoduché, tak složité datové typy, které se vzájemně vztahují, což jinak nebude mít smysl. Každý člen v rámci struktury dostane své vlastní paměťové místo, aby bylo kdykoli přístupné a načteno.
Struktura se používá tehdy, když je třeba shromažďovat řadu dat jako adresář, který uchovává informace o mnoha členách v knize nebo v adresáři, který ukládá veškeré informace o jednom kontaktním jménu, adrese, kontaktním číslu a podobně. Adresa každého člena bude ve vzestupném pořadí, což znamená, že paměť každého člena bude začínat na různých hodnotách offsetu. Změna hodnoty jednoho člena nebude mít žádný vliv na ostatní členy.
Klíčové slovo "struct" se používá k definování struktury různých datových typů pod jedním jménem. Pokud chcete například vytvořit databázi zaměstnanců, je třeba uložit jméno, věk, telefon a údaje o platu zaměstnanců pod jednu entitu. To se provádí klíčovým slovem "struct", který pak řeší kompilátoru, že struktura byla deklarována.
struct employee {
název řetězce;
řetězec věku;
telefonní řetězec;
řetězová mzda;
} emp1, emp2;
Zde je "zaměstnanec" název struktury a dvě proměnné "emp1" a "emp2" jsou vytvořeny typu "zaměstnanec". Na závěrečných příchytkách musí následovat středník (;).
Členům struktury lze přistupovat ze dvou typů operátorů:
- Členský operátor
- Operátor ukazatele struktury
Co je Unie?
Jedná se o speciální typ dat používaný v jazyce C, který umožňuje uživateli ukládat typy dat různých typů do stejné paměti. Unie je docela podobná struktuře a může být definována nahrazením klíčového slova "struct" klíčem "union". Členové překrývají vzpomínky na sebe navzájem a jsou dostatečně velké, aby se vešly všem svým členům.
Když je proměnná spojena s spojením, kompilátor přidělí paměť zvážením velikosti největší paměti, takže velikost svazku se rovná velikosti největšího datového členu. Sjednocení může být definováno s mnoha členy, ale pouze jeden člen obsahuje hodnotu v libovolné instanci času.
Adresa je stejná pro všechny členy svazu, což znamená, že každý člen začíná se stejnou hodnotou offsetu. Změna hodnoty jednoho člena ovlivní hodnoty ostatních členů. Spojení lze použít, pokud chcete uložit něco, co je jedním z několika datových typů.
odborový pracovník {
char název [32];
int age;
placená mzda;
};
Zde klíčové slovo "unie" definuje jednotu, která je docela podobná deklaraci struktury. Proměnná může buď uložit hodnotu řetězce, která je "jméno zaměstnance", celočíselná hodnota, která je "věk zaměstnance", nebo float, který představuje "plat zaměstnance".
Rozdíl mezi strukturou a Unií
1. Klíčové slovo
Klíčové slovo 'struct' se používá k definování struktury, zatímco klíčové slovo 'union' se používá k definování svazku.
2. Přidělení paměti
Oddělený prostor pro paměť je přidělen členům v rámci struktury a členové mají různé adresy, které nesdílí paměť. Unie naopak sdílí stejný paměťový prostor pro všechny členy, takže je přidělena sdílená paměť.
3. Členský přístup
Jednotka ukládá současně jednu hodnotu, protože všichni její členové zpřístupňují pouze jeden člen najednou. Zatímco v rámci struktury lze uložit více hodnot, takže kdykoli může být přístupná a získána libovolná hodnota člena.
4. Velikost
Velikost struktury se rovná součtu velikosti všech členů nebo více, zatímco velikost svazku se rovná velikosti největšího člena velikosti.
5. Inicializace
Ve struktuře může být několik členů inicializováno najednou, zatímco v jednotce může být inicializován pouze první člen s hodnotou svého typu.
5. Hodnota
Struktura může ukládat různé hodnoty všech členů a změna hodnoty jednoho člena nebude mít vliv na hodnoty ostatních členů. Zatímco odborná organizace ukládá stejnou hodnotu všem svým členům a změna hodnoty jednoho člena ovlivní hodnotu ostatních členů.
Struktura vs. unie
Struktura | svaz |
Strukturní klíčové slovo se používá k definování struktury. | Klíčové slovo Unie se používá k definování svazku. |
Členové sdílejí paměť ve struktuře. | Členové sdílejí paměťový prostor v odboru. |
Každý člen může být kdykoliv načten do struktury. | Jeden člen může být přístupný najednou v odboru. |
Několik členů struktury může být inicializováno najednou. | Pouze první člen může být inicializován. |
Velikost struktury se rovná součtu velikosti každého člena. | Velikost svazku se rovná velikosti největšího člena. |
Změna hodnoty jednoho člena neovlivní hodnotu jiného. | Změna hodnoty jednoho člena ovlivní ostatní hodnoty členů. |
Uchovává různé hodnoty pro všechny členy. | Uloží stejnou hodnotu pro všechny členy. |
souhrn
- Struktura a spojení jsou uživatelsky definované datové typy v jazyce C, které jsou funkčně a koncepčně stejné, avšak v některých ohledech jsou zcela odlišné.
- Oba obsahují proměnné různých datových typů, ale používají stejnou syntaxi pro deklarování proměnných a přístup k členům. Zatímco struktura je definována klíčovým slovem "struct", oddíl je definován klíčovým slovem "union".
- Každý člen má samostatnou paměťovou pozici ve struktuře, zatímco v jednotce je celkový prostor paměti rovnocenný největšímu členu velikosti. Všichni členové sdílejí stejný paměťový prostor v odboru.
- Každý člen v libovolné sekvenci může být zpřístupněn ve struktuře, zatímco v jednotce může být přístupná pouze proměnná, jejíž hodnota je nedávno uložena.