Sissejuhatus C Liitu

Union on kasutaja määratletud andmetüüp c-s, see võimaldab salvestada erinevat tüüpi andmesideelemente, mida saab hoida samas mälupesa. See on tõhus viis mälu kasutamiseks, kuna igal ajahetkel pääseb juurde ainult ühele liidu liikmele. Seega oleks liidu suurus igal ajahetkel võrdne selle suurima elemendi suurusega. Kuigi liit on nagu struktuur, on peamine erinevus selles, et struktuuris eraldatakse igale struktuuri liikmele eraldatud mälu, samas kui liidus on see jagatud mälu, mis võrdub suurima liikme suurusega.

Süntaks:

Liitu saab määratleda järgmiselt.

union UnionName
(
UMember1;
UMember2;
UMember3;
) UnionReference;

C Liidu liikmetele pääseb juurde viitega 'UnionReference'. liit on märksõna.

Näide struktuuri ja liitumise kohta mälu jaotuses:

Näidakem erinevust mälu jaotuses struktuuri ja liitumise vahel.

Kood:

#include
struct samp_structure
(
char name1(30);
int e_id;
float e_slry;
char name2(60);
)s;
union s_union
(
char name1(30);
int e_id;
float saly;
)u;
int main()
(
printf("size of structure :%ld bytes \n", sizeof(s));
printf("size of union : %ld bytes\n", sizeof(u));
return 0;
)

Väljund:

C Liidu näited

Vaatame C Liidu rakendamist allpool nimetatud näidete abil:

Näide nr 1

See on näide C liidu määratlemiseks ja liikmetele juurdepääsu saamiseks.

Kood:

#include
#include
union test (
int tint;
float tf;
char tstr(20);
);
int main( ) (
union test t;
t.tint = 100;
printf( "record.i : %d\n", t.tint);
t.tf= 200.5;
printf( "record.f : %f\n", t.tf);
strcpy( t.tstr, "Test");
printf( "record.str : %s\n", t.tstr);
return 0;
)

Väljund :

Näide 2

Allpool on sama kood, mis ülal, välja arvatud see, et prindiavaldused on ümber korraldatud.

Kood:

#include
#include
union test (
int tint;
float tf;
char tstr(20);
);
int main( ) (
union test t;
t.tint = 100;
t.tf = 200.5;
strcpy( t.tstr, "Test");
printf( "record.i : %d\n", t.tint);
printf( "record.f : %f\n", t.tf);
printf( "record.str : %s\n", t.tstr);
return 0;
)

Väljund:

Kui väljundit tähelepanelikult vaadata, näete, et int ja float jaoks on prügiväärtused määratud seetõttu, et stringi jaoks oli mälu lõpuks määratud, st kuna liikmed jagavad mälu liidus, siis liige, kelle väärtus on praegu salvestatud, saab juurdepääs mälule.

Näide 3

Anonüümne liit on liit, mida ei nimetata, seega saab neid kasutada mis tahes pesastatud struktuuris või ühenduses. Anonüümse liidu liikmetele pääseb nende määratluse piires otse juurde. Samuti saab anonüümses ühenduses kasutada anonüümset struktuuri.

Anonüümse ühenduse süntaks ja struktuur järgmiselt:

// Anonymous union example
union
(
char anoUChar;
int anoUNum;
);
// Anonymous structure example
struct
(
char anoSChar;
int anoSNum;
);

Näide anonüümse konstruktsiooni liitumisest ehitise sees:

#include
struct testscope
(
// Anonymous union
union
(
char testChar;
int testNum;
int testNum2;
);
);
int main()
(
struct testscope ts;
ts.testNum = 65;
// Note that members of union are accessed directly
printf("testchar = %c, testnum = %d, testnum2 = %d", ts.testChar, ts.testNum, ts.testNum2);
return 0;
)

Väljund:

Testcharile on omistatud väärtus 'A', kuna liitmälus on hiljutine väärtus 65, mis määrati testNum'ile, järelikult trükitakse vastav ASCII märk.

Märkus: ametiühingu liikmetele antakse juurdepääs otse.

Näide anonüümsest struktuurist ametiühingus:

#include
union testscope
(
// Anonymous union
struct
(
char testChar;
int testNum;
int testNum2;
);
);
int main()
(
union testscope ts;
ts.testNum = 65;
ts.testChar='V';
//Note: The members of struct are accessed directly
printf("testchar = %c, testnum = %d, testnum2 = %d", ts.testChar, ts.testNum, ts.testNum2);
return 0;
)

Väljund:

Järeldus

Seega aitab liit tõhusalt mälu hallata. Liidu puuduseks on see, et saadaval on ainult viimane liitväärtus. Seda tuleks kasutada siis, kui ametiühingu liikmetel ei pea olema samal ajal juurdepääsu.

Soovitatavad artiklid

See on C Liidu juhend. Siin käsitleme koodiliidese juurutamist, süntaksit ja erinevaid näiteid koos koodide juurutamisega. Lisateabe saamiseks võite vaadata ka järgmisi artikleid -

  1. C märksõnad
  2. Massiivid C-programmeerimises
  3. Palindroomi programm C ++ versioonis
  4. C salvestusklassid

Kategooria: