Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Uniuni

c


Uniuni

O uniune este o varaibila care poate pastra (la momente
diferite) obiecte de diferite tipuri si dimensiuni, iar
compilatorul tine seama de cerintele de dimensiune si
aliniament. Uniunile permit sa se manipuleze diferite feluri de
date intr-o singura zona de memorie, fara sa se includa in
program nici un fel de informatii dependente de masina.

Ca de exemplu, sa consideram din nou o tabela de simboluri a
unui compilator. Sa presupunem ca constantekle pot fi "int",
"float" sau pointeri de caractere. Valoarea unei constante
particulare trebuie memorata intr-o variabila de tipul
corespunzator, dar este cel mai convenabil pentru organizarea
tabelei daca valoarea ocupa aceasi dimensiune de memorie si
acelasi loc in memorie in functie de tipul ei. Aceasta este
scopul unei uniuni -sa permita ca o singura variabila care poate
sa contina oricare din mai multe tipuri. La fel ca la cimpuri,
sintaxa se bazeaza pe structuri.

union u-tag uval;

O variabila "uval" va fi suficient de mare ca sa pastreze oricare
din cele trei tipuri, iar privitor la masina, codul generat de
compilator este indiferent de caracteristicile hard. Oricare din
aceste tipuri poate fi asignat la "uval" si apoi utilizat in
expresii, atita vreme cit uzajul este considerat, adica tipul
utilizat trebuie sa fie cel mai recent memorat. Este
responsabilitatea programatorului sa tina seama de tipul de
data curent memorat intr-o uniune; rezultatele sint dependente de
masina daca ceva este memorat ca un tip si este extras ca altul.

Sintactic, membri unei uniuni sint accesati ca

union-name.member

sau

union-pointer->member

la fel cu structurile. Daca variabila "utype" este folosita pentru
a tine seama
de tipul curent al marimii memorate in "uval", poate scrie un cod,
astfel:

if (utype == INT)
printf("%d\n", uval.ival);
else if (utype == FLOAT)
printf("%f\n", uval.fval);
else if (utype == STRING)
printf("%s\n", uval.pval);
else
printf("bad type %d in utype\n", utype);

Uniunile pot sa se gaseasca in structuri si tablouri si
viceversa. Notatia pentru a accesa un membru a unei uniuni
dintr-o structura(sau viceversa) este identica cu aceea pentru
structurile in cuiburi. De exemplu in structura definita prin

struct uval;
} symtab[NSYM];

variabila "ival" este referita astfel

symtab[i].uval.ival

iar primul caracter al sirului "pval" prin

*symtab[i].uval.pval

In fond, o uniune este o structura in care toti membri au
deplasamentul zero, structura este suficient de mare ca sa
cuprinda cel mai mare membru, iar aliniamentul este potrivit
pentru toate tipurile din uniune Ca si la structuri singurele
operatii admise cu uniunile sint de a accesa un membru si
obtinerea adresei lui;uniunile nu pot fi asignate, nu se pot
aplica functii asupra lor, Pointeri la uniuni pot fi
utilizati de o maniera identica pinterilor la structuri.

In capitolul 8 se arata cum alocatorul de memorie prin
intermediul unei uniuni de memorie prin intermediul unei uniuni
forteaza o variabila sa se alinieze la orice fel de
particularitati de memorare.




Document Info


Accesari: 870
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )