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.
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:
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ą“..
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 | 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. |