Differences

This shows you the differences between two versions of the page.

Link to this comparison view

programare:laboratoare:suport-teoretic:tipuri-de-date-definite-de-utilizator-uniuni [2025/10/10 16:58] (current)
darius.neatu created
Line 1: Line 1:
 +===== PCLP Suport Teoretic pentru Laborator: Tipuri de date definite de utilizator - uniuni =====
 +
 +==== Obiective ====
 +
 +În urma parcurgerii acestui material studentul va fi capabil să:
 +  * organizeze datele din rezolvarea unei probleme complexe în structuri și structuri;
 +  * optimizeze scrierea funcţiilor prin minimizarea numărului de parametri şi prin utilizarea structurilor ca parametri returnaţi de funcţie;
 +  * distingă diferenţa dintre o structură şi o uniune;
 +  * evite utilizarea greşită a acestor construcții.
 +
 +=== Uniuni ===
 +Uniunile sunt asemănătoare structurilor,​ dar lor li se rezervă o zonă de memorie ce poate conţine, la momente de timp diferite, variabile de tipuri diferite. Sunt utilizate pentru a economisi memoria (se refoloseşte aceeaşi zonă de memorie pentru a stoca mai multe variabile).
 +
 +Uniunile se pot declara astfel:
 +<code c>
 +union numere {
 +  int i;
 +  float f;
 +  double v;
 +};              /* se poate utiliza si typedef... */
 +
 +union numere u1, u2;
 +</​code>​
 +
 +Când scriem ceva într-o uniune (de exemplu când facem o atribuire de genul u1.f = 7.4), ceea ce citim apoi trebuie să fie de acelaşi tip, altfel vom obţine rezultate eronate (adică trebuie să utilizam u1.f, nu u1.v sau u1.i). Programatorul trebuie să ţină evidenţa tipului variabilei care este memorată în uniune în momentul curent pentru a evita astfel de greşeli. Operaţiile care se pot face cu structuri se pot face şi cu uniuni; o structura poate conţine uniuni şi o uniune poate conţine structuri.
 +
 +Exemplu:
 +<code c>
 +#include <​stdio.h>​
 +#include <​stdlib.h>​
 +
 +typedef union {
 +  int Wind_Chill;
 +  char Heat_Index;
 +} Condition;
 +
 +typedef struct {
 +  float temp;
 +  Condition feels_like;
 +} Temperature;​
 +
 +int main() {
 +
 +  Temperature *tmp;
 +  tmp = (Temperature *)malloc(sizeof(Temperature));​
 +    ​
 +  printf("​\nAddress of Temperature = %u", tmp);
 +  printf("​\nAddress of temp = %u, feels_like = %u", ​
 +                 &​(*tmp).temp,&​(*tmp).feels_like);​
 +  printf("​\nWind_Chill = %u, Heat_Index= %u\n", ​
 +                 &​((*tmp).feels_like).Wind_Chill,​
 +                 &​((*tmp).feels_like).Heat_Index);​
 +
 +  return 0;
 +}
 +</​code>​
 +
 +La rulare va afişa:
 +<code c>
 +Address of Temperature = 165496
 +Address of temp = 165496, feels_like = 165500
 +Wind_Chill = 165500, Heat_Index= 165500
 +</​code>​
  
programare/laboratoare/suport-teoretic/tipuri-de-date-definite-de-utilizator-uniuni.txt · Last modified: 2025/10/10 16:58 by darius.neatu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0