Skirtumas tarp struktūros ir sąjungos

Tiek struktūra, tiek sąjunga yra vartotojo apibrėžti duomenų tipai C kalba ir yra konceptualiai vienodi, tačiau vis tiek jie tam tikru požiūriu skiriasi, pavyzdžiui, kaip atmintis paskirstoma jų nariams. Jie deklaruojami panašiai, tačiau veikia skirtingai. Jie leidžia vartotojui sujungti skirtingus duomenų tipus vienu vardu. Nors deklaruojant struktūros kintamuosius kiekvienam nariui naudojama atskira atminties vieta, skirtingi sąjungos kintamojo nariai turi tą pačią atminties vietą. Išnagrinėsime skirtumą tarp struktūros ir sąjungos.

Kas yra struktūra?

Struktūra yra tik dar vienas vartotojo apibrėžtas duomenų tipas C, leidžiantis vartotojui sujungti skirtingų tipų duomenų tipus į vieną atminties bloko tipą. Struktūroje gali būti tiek paprastų, tiek sudėtingų, tarpusavyje susijusių duomenų tipų, kurie kitu atveju nebus prasmingi. Kiekvienas struktūros narys gauna savo atminties vietą, kad bet kada galėtų prieiti ir atsisiųsti.

Struktūra naudojama, kai reikia daugybės duomenų grupavimo, pavyzdžiui, katalogo, kuriame kaupiama informacija apie daugelį knygos narių, arba adresų knygelėje, kurioje saugoma visa informacija apie vieną kontaktą - vardas, adresas, kontakto numeris ir pan. Kiekvieno nario adresas bus didėjančia tvarka, tai reiškia, kad kiekvieno nario atmintis prasidės skirtingomis poslinkio reikšmėmis. Vieno nario vertės pakeitimas neturės jokios įtakos kitiems nariams.

„Struktinis“ raktinis žodis naudojamas apibrėžti skirtingų duomenų tipų struktūrą vienu vardu. Pvz., Jei norite sukurti darbuotojų duomenų bazę, turėsite saugoti darbuotojo vardą, pavardę, amžių, telefoną ir informaciją apie atlyginimą viename subjekte. Tai atliekama pagal raktinį žodį „struct“, kuris kompiliatoriui nurodo, kad struktūra paskelbta.

struct darbuotojas

stygos pavadinimas;

stygų amžius;

styginiu telefonu;

stygų atlyginimas;

emp1, emp2;

Čia „darbuotojas“ yra struktūros pavadinimas ir sukuriami du „darbuotojo“ tipo kintamieji „emp1“ ir „emp2“. Po užsegimo petnešomis turi būti kabliataškis (;).

Struktūros narius gali pasiekti dviejų tipų operatoriai:

  1. Narys operatorius
  2. Struktūros rodyklės operatorius

Kas yra Sąjunga?

Tai specialus duomenų tipas, naudojamas C, leidžiantis vartotojui saugoti skirtingų tipų duomenų tipus toje pačioje atminties vietoje. Sąjunga yra gana panaši į struktūrą ir ją galima apibrėžti pakeičiant raktinį žodį „struct“ žodžiu „union“. Nariai sąjungoje užkloja vienas kito atmintį ir yra pakankamai dideli, kad tilptų visi jos nariai.

Kai kintamasis yra susijęs su sąjunga, kompiliatorius paskirsto atmintį atsižvelgdamas į didžiausios atminties dydį, taigi sąjungos dydis yra lygus didžiausio duomenų nario dydžiui. Sąjunga gali būti apibrėžta su daugeliu narių, tačiau reikšmę kiekvienu konkrečiu laiko momentu turi tik vienas narys.

Adresas yra vienodas visiems sąjungos nariams, tai reiškia, kad kiekvienas narys pradeda ta pačia ofsetine verte. O vieno nario vertės pakeitimas paveiks kitų narių vertybes. Sąjunga gali būti naudojama, kai norite išsaugoti tai, kas yra vienas iš kelių duomenų tipų.

sąjungos darbuotojas

char vardas [32];

vidinis amžius;

kintama alga;

;

Čia raktinis žodis „sąjunga“ apibūdina sąjungą, kuri yra gana panaši į struktūros deklaraciją. Kintamasis gali saugoti eilutės vertę, kuri yra „darbuotojo vardas“, sveikąją skaičių, kuri yra „darbuotojo amžius“, arba kintamąją, kuri nurodo „darbuotojo atlyginimą“..

Skirtumas tarp struktūros ir sąjungos

1. Raktinis žodis

Raktinis žodis „struct“ naudojamas apibrėžti struktūrą, o „union“ raktinis žodis yra naudojamas sąjungai apibrėžti.

2. Atminties paskirstymas

Atskiros atminties vietos yra skiriamos struktūros nariams, o nariai turi skirtingus adresus, kurie nesidalija atmintimi. Kita vertus, sąjunga turi vienodą atminties vietą visiems savo nariams, taigi paskirstoma bendroji atminties vieta.

3. Narių prieiga

Profesinė sąjunga kaupia vieną vertę vienu metu visiems savo nariams, sudarydama galimybę naudotis tik vienu nariu vienu metu. Nors struktūroje galima laikyti kelias vertes, todėl bet kurią nario vertę galima pasiekti ir nuskaityti bet kuriuo metu.

4. Dydis

Struktūros dydis yra lygus visų ar daugiau narių dydžių sumai, tuo tarpu sąjungos dydis yra lygus didžiausio dydžio nario dydžiui..

5. Iniciacija

Struktūroje gali būti inicijuojami keli nariai vienu metu, o sąjungoje tik pirmasis narys gali būti inicializuotas pagal jo tipo vertę..

5. Vertė

Struktūra gali kaupti skirtingas visų narių vertybes, o vieno nario vertės pasikeitimas neturės jokios įtakos kitų narių vertybėms. Nors sąjunga išlaiko vienodą vertę visiems savo nariams, o vieno nario vertės pasikeitimas paveiks kito vertę.

Struktūra ir sąjunga

Struktūra Sąjunga
Struktūros raktinis žodis naudojamas apibrėžti struktūrą. Sąjungos raktinis žodis naudojamas sąjungai apibrėžti.
Nariai nedalija atminties struktūroje. Nariai dalijasi atminties vieta sąjungoje.
Bet kurį narį bet kada galima atgauti iš struktūros. Vienu metu profsąjungoje gali dalyvauti tik vienas narys.
Vienu metu gali būti inicijuojami keli struktūros nariai. Inicijuoti galima tik pirmąjį narį.
Statinio dydis yra lygus kiekvieno elemento dydžio sumai. Sąjungos dydis yra lygus didžiausio nario dydžiui.
Kintanti vieno nario vertė nepaveiks kito. Vieno nario vertės pokytis paveiks kitų narių vertes.
Visų narių vertybės saugomos skirtingai. Sandoriai vienoda visiems nariams.

Santrauka

  • Tiek struktūra, tiek sąjunga yra vartotojo apibrėžti duomenų tipai C, kurie yra funkciškai ir konceptualiai vienodi, tačiau kai kuriais atvejais yra gana skirtingi..
  •  Abiejuose yra skirtingų duomenų tipų kintamieji, tačiau jie naudoja tą pačią sintaksę kintamųjų deklaracijai ir nariams prisijungti. Nors struktūrą apibrėžia raktinis žodis „struct“, sąjunga apibrėžiama raktiniu žodžiu „union“.
  • Kiekvienas narys gauna atskirą atminties vietą struktūroje, tuo tarpu sąjungoje visa atminties vieta yra lygi didžiausio dydžio nariui. Visi nariai turi tą pačią atminties vietą sąjungoje.
  • Bet kuris bet kurios sekos narys gali būti pasiekiamas struktūroje, tuo tarpu sąjungoje gali būti prieinamas tik tas kintamasis, kurio vertė neseniai saugoma..