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.