Asociația, de programare C și c

union_type unire int i; ch char;
>;

cnvt union_type unire;

În cnvt ca un întreg i, iar caracterul ocupă o CH locație de memorie. (Desigur, i este un 2 sau 4 octeți, o grupare CH - numai 1.) Figura arată modul în care ch i și partajați-o locație de memorie (presupunând disponibilitatea de numere întregi pe 16 biți). Puteți accesa datele stocate în CNVT, ca un întreg, și simbolul.

Figura: Utilizarea variabilelor i și cnvt, (dimensiunea unei variabile întreg este considerată a fi de 16 biți)

Când a anunțat unirea, compilatorul creează automat o variabilă suficient de mare pentru a deține cea mai mare variabila, care este prezent în piscină.

Pentru a avea acces la membrii asociațiilor utilizate de sintaxă folosite pentru structurile de acces - cu ajutorul operatorilor „punct“ și „săgeată“. Pentru a lucra direct cu uniunea, este necesar să se utilizeze operatorul „punct“. În cazul în care un tratament de combinație variabilă are loc prin intermediul unui pointer, este necesar să se utilizeze operatorul „săgeată“. De exemplu, pentru atribuirea întreg i combinarea elementului 10 trebuie să scrie cnvt:

Utilizarea asociațiilor ajută la crearea unui cod mașină independent (portabil). Deoarece compilatorul ține evidența dimensiunilor reale ale variabilelor care compun Uniunea, a redus dependența de computer. Nu este nevoie să vă faceți griji cu privire la dimensiunea de întreg sau numere reale, caractere, sau orice altceva.

Unificarea folosit adesea când conversii de tip necesare, deoarece este posibil pentru a accesa datele stocate în piscină, destul de o varietate de moduri. Luați în considerare problema de a înregistra un număr întreg în fișierul. Deși este posibil să se scrie orice tip de date (inclusiv a) un fișier folosind fwrite (), pentru fwrite funcționare () este prea „grăsime“. Folosind o combinație, puteți crea cu ușurință o funcție, de înregistrare octet reprezentarea binară a unui fișier. Deși există mai multe moduri de a crea această funcție, există o modalitate de a face acest lucru prin combinarea. În acest exemplu, se presupune de a utiliza numere întregi pe 16 biți. Asociația este format dintr-un întreg și două matrice octet de caractere:

Fuzionarea permite accesul la doi octeți ca unitate care formează caractere individuale. Acum puteți utiliza pentru a crea write_int PW () funcție, se arată în următorul program:

#include
#include
uniunea pw int i;
char ch [2];
>;

int write_int (int num, FILE * fp);

int main ()
FILE * fp;
fp = fopen ( "test.tmp", "w +");

în cazul în care (fp == NULL) printf ( "Nu pot deschide fișierul \ n.");
ieșire (1);
>

write_int (1000, fp);
fclose (fp);
return 0;
>

/ * Producția de ansamblu prin combinarea * /

int write_int (int num, FILE * fp) uniunea pw wrd;
wrd.i = num;
puts (wrd.ch [0], fp); / * O concluzie din prima jumătate a * /
reveni putc (wrd.ch [1], fp); / * De ieșire din a doua jumătate a * /
>

Deși write_int () este numit cu întreg, se folosește asociația pentru a înregistra ambele jumătăți ale întregului ansamblu la un octet cu octet fișier de pe disc.