UNIUNI SI TIPUL ENUM
UNIUNI
Foloseste cuvantul rezervat union. Deosebirea esentiala dintre o uniune si o structura este ca in cazul uniunii folosim acelasi spatiu de memorie.
O uniune se defineste folosind cuvantul rezervat union asemănător cu o structură, diferenţa esenţială dintre o uniune şi o structură este că membrii uniunii folosesc în comun aceeaşi zonă de memorie.
1union test { char c; int i; float f; 79 };
Pentru a reţine o variabilă de tip union sunt necesari 4 octeţi de memorie. În exemplul de mai sus câmpurile c, i şi f ale uniunii se referă toate la aceeaşi zonă din memorie: c se referă la primul octet (din cei patru), i se referă la primii doi octeţi, iar f se referă la toţi cei 4 octeţi.
1#include "stdio.h"
2#include "conio.h"
3
4union test \\foloseste aceeasi zona de \\memorie
5{
6 char c;
7 int i;
8 float f;
9 double d;
10 char st[9];
11};
12
13struct test2 \\foloseste zona de \\memorie diferita
14{
15 char c;
16 int i;
17 float f;
18 double d;
19 char st[9];
20};
21
22void main()
23{
24 printf("%d %d"\n, sizeof(struct test2), sizeof(union test)); //40 16
25 //(x-1)*8 < 40 <= x*8 = 32
26 union test u;
27 u.c='A';
28 printf("%c %d %f", u.c, u.d, u.f);
29 _getch();
30}
TIPUL ENUM
1enum culoare
2{
3 CL_BLACK, //0
4 CL_RED, //1
5 CL_GREEN, //2
6 CL_BLUE, //3
7 CL_WHITE //4
8};
9
10enum tipdrum
11{
12 TD_PAMANT, //0
13 TD_PAVAT, //1
14 TD_COMUNAL = 5,
15 TD_LOCAL, //6
16 TD_JUDETEAN, //7
17 TD_NATIONAL, //8
18 TD_EUROPEAN = 10,
19 TD_AUTOSTRADA =20
20 };
21
22enum tipdrum v;
23v=TD_NATIONAL;
24v=(enum tipdrum)7;
in interiorul unui enum se enumera constante dar care trebuie sa fie toate intregi
de regula constantele in C si C++ se dau cu litere mari
daca definesc un grup de constante, atunci e bine sa aiba toate acelasi prefix
prefixul se da de forma 2,3 sau 4 constante urmate de _ si apoi denumirea constantei
pt ca putem sa avem mai multe tipuri de constante pentru diverse situatii
ex: CL - culoare
intr-un set de constante se prefera sa avem valori diferite pentru fiecare constanta.
putem avea si valori similare si nu este necesar ca aceste valori sa fie in ordine crescatoare
le dam denumiri care incep cu acelasi prefix
in C++, daca avem mai multe tipuri de constante, la un moment dat putem avea de ex tip drum si altul drum, iar utilizatorul vrea sa foloseasca o constanta tip drum, iar pentru asta foloseste o variabila din tip drum, se produce o eroare.