Gan struktūra, gan savienība ir lietotāja definēti datu tipi C valodā un ir konceptuāli vienādi, tomēr tie dažos veidos atšķiras, piemēram, veids, kā atmiņa tiek piešķirta dalībniekiem. Tos deklarē līdzīgi, bet tie darbojas atšķirīgi. Tie ļauj lietotājam apvienot dažādus datu tipus vienā nosaukumā. Lai gan, deklarējot struktūras mainīgos, katram loceklim tiek izmantota atsevišķa atmiņas vieta, dažādiem savienības mainīgā locekļiem ir viena un tā pati atmiņas vieta. Pētīsim atšķirību starp struktūru un savienību, kas ir detalizēta.
Struktūra ir tikai cits lietotāja definēts datu tips C, kas ļauj lietotājam atmiņas blokā apvienot dažādu veidu datu tipus vienā tipā. Struktūra var saturēt gan vienkāršus, gan sarežģītus savstarpēji saistītus datu tipus, kuriem citādi nav jēgas. Katrs struktūras loceklis iegūst savu atmiņas vietu, lai tam varētu piekļūt un izgūt jebkurā laikā.
Struktūra tiek izmantota, ja daudzām grupām nepieciešams grupēt datus, piemēram, direktoriju, kurā grāmatā tiek glabāta informācija par daudziem dalībniekiem, vai adrešu grāmatā, kurā tiek glabāta visa informācija par vienu kontaktpersonu - vārdu, adresi, kontakta numuru utt. Katra dalībnieka adrese būs augošā secībā, kas nozīmē, ka katra dalībnieka atmiņa sāksies ar dažādām nobīdes vērtībām. Viena dalībnieka vērtības maiņa neietekmēs citus dalībniekus.
Lai noteiktu dažādu datu tipu struktūru vienā nosaukumā, tiek izmantots atslēgvārds “struktūra”. Piemēram, ja vēlaties izveidot darbinieku datu bāzi, jums būs jāsaglabā darbinieka vārds, vecums, tālrunis un informācija par algu vienā entītijā. To veic ar atslēgas vārdu “struct”, kas kompilatoram paziņo, ka struktūra ir deklarēta.
strukts darbinieks
stīgas nosaukums;
stīgu vecums;
stīgu tālrunis;
stīgu alga;
emp1, emp2;
Šeit “darbinieks” ir struktūras nosaukums un tiek izveidoti divi mainīgie “emp1” un “emp2” no tipa “darbinieks”. Aizvēršanas stiprinājumiem seko semikols (;).
Struktūras dalībniekiem var piekļūt divu veidu operatori:
Tas ir īpašs datu tips, ko lieto C, kas ļauj lietotājam tajā pašā atmiņas vietā glabāt dažādu veidu datu tipus. Savienība ir diezgan līdzīga struktūrai, un to var definēt, aizstājot atslēgvārdu “struct” ar atslēgvārdu “union”. Biedri savstarpēji pārņem atmiņu savienībā, un tā ir pietiekami liela, lai ietilptu visus tās biedrus.
Ja mainīgais ir saistīts ar savienību, kompilators sadala atmiņu, ņemot vērā lielākās atmiņas lielumu, tāpēc savienības lielums ir vienāds ar lielākā datu dalībnieka lielumu. Savienību var definēt ar daudziem biedriem, bet vērtību tikai konkrētā laika posmā satur tikai viens dalībnieks.
Visiem arodbiedrības dalībniekiem adrese ir vienāda, tas nozīmē, ka katrs dalībnieks sāk ar vienādu nobīdes vērtību. Viena dalībnieka vērtības maiņa ietekmēs citu dalībnieku vērtību. Savienību var izmantot, ja vēlaties saglabāt kaut ko tādu, kas ir viens no vairākiem datu tipiem.
arodbiedrības darbinieks
char vārds [32];
int vecums;
peldošā alga;
;
Šeit atslēgvārds “savienība” definē savienību, kas ir diezgan līdzīga struktūras deklarācijai. Mainīgais lielums var saglabāt virknes vērtību, kas ir “darbinieka vārds”, veselu skaitli, kas ir “darbinieka vecums”, vai mainīgo, kas apzīmē “darbinieka algu”..
1. Atslēgvārds
Atslēgvārds 'struct' tiek izmantots, lai definētu struktūru, savukārt 'union' atslēgvārds tiek izmantots, lai definētu savienību.
2. Atmiņas piešķiršana
Struktūras locekļiem tiek piešķirta atsevišķa atmiņas telpa, un dalībniekiem ir dažādas adreses, kurām nav kopīgas atmiņas. No otras puses, arodbiedrība dala vienādu atmiņas vietu visiem tās dalībniekiem, tāpēc tiek iedalīta koplietotā atmiņas vieta.
3. Biedru piekļuve
Arodbiedrība glabā vienu vērtību vienlaikus visiem biedriem, padarot piekļuvi tikai vienam biedram vienlaikus. Kaut arī struktūrā var uzglabāt vairākas vērtības, tātad jebkurai dalībnieka vērtībai var piekļūt un to iegūt jebkurā laikā.
4. Izmērs
Struktūras lielums ir vienāds ar visu vai lielāku locekļu kopsummu, turpretī savienības lielums ir vienāds ar lielākā lieluma locekļa lielumu..
5. Inicializācija
Struktūrā vairākus locekļus var inicializēt uzreiz, savukārt savienībā tikai pirmais dalībnieks var tikt inicializēts ar tā veida vērtību.
5. Vērtība
Struktūra var saglabāt atšķirīgas visu dalībnieku vērtības, un viena dalībnieka vērtības izmaiņas neietekmēs citu dalībnieku vērtības. Kamēr arodbiedrība saglabā vienādu vērtību visiem saviem biedriem, un viena dalībnieka vērtības maiņa ietekmēs citu vērtību.
Uzbūve | Savienība |
Struktūras atslēgvārds tiek izmantots struktūras noteikšanai. | Savienības atslēgvārds tiek izmantots, lai definētu savienību. |
Locekļi nedalās atmiņā struktūrā. | Locekļi dalās atmiņā arodbiedrībā. |
Jebkurš loceklis jebkurā laikā var tikt ielādēts struktūrā. | Arodbiedrībā vienlaikus var piekļūt tikai vienam loceklim. |
Vienlaicīgi var inicializēt vairākus struktūras locekļus. | Inicializēt var tikai pirmais dalībnieks. |
Konstrukcijas lielums ir vienāds ar katra locekļa lieluma summu. | Savienības lielums ir vienāds ar lielākā locekļa lielumu. |
Viena dalībnieka vērtības mainīšana neietekmēs cita locekļa vērtību. | Viena dalībnieka vērtības izmaiņas ietekmēs citu dalībnieku vērtības. |
Saglabā atšķirīgas vērtības visiem dalībniekiem. | Visu dalībnieku vērtība ir vienāda. |