Les unions en C són una característica poderosa que permet emmagatzemar diferents tipus de dades en la mateixa ubicació de memòria. A diferència de les estructures, on cada membre té la seva pròpia ubicació de memòria, en una unió tots els membres comparteixen la mateixa ubicació de memòria. Això significa que només un membre de la unió pot contenir un valor en qualsevol moment.

Conceptes Clau

  1. Definició d'Unió: Una unió es defineix de manera similar a una estructura, però amb la paraula clau union.
  2. Compartició de Memòria: Tots els membres d'una unió comparteixen la mateixa ubicació de memòria.
  3. Ús de Memòria: La mida d'una unió és igual a la mida del seu membre més gran.
  4. Accés als Membres: Només un membre de la unió pot ser utilitzat a la vegada.

Definició d'una Unió

La sintaxi per definir una unió és similar a la d'una estructura:

union Exemple {
    int i;
    float f;
    char c;
};

En aquest exemple, Exemple és una unió que pot contenir un int, un float o un char, però només un d'aquests a la vegada.

Declaració i Inicialització

Per declarar una variable d'una unió i inicialitzar-la, es fa de la següent manera:

union Exemple e;
e.i = 10;

En aquest cas, e és una variable de la unió Exemple i s'ha inicialitzat el membre i amb el valor 10.

Accés als Membres

Només un membre de la unió pot contenir un valor a la vegada. Si s'assigna un valor a un altre membre, el valor anterior es perdrà.

#include <stdio.h>

union Exemple {
    int i;
    float f;
    char c;
};

int main() {
    union Exemple e;
    e.i = 10;
    printf("e.i = %d\n", e.i);
    
    e.f = 220.5;
    printf("e.f = %f\n", e.f);
    
    e.c = 'A';
    printf("e.c = %c\n", e.c);
    
    return 0;
}

Sortida esperada:

e.i = 10
e.f = 220.500000
e.c = A

Comparació amb Estructures

Característica Estructura Unió
Memòria Cada membre té la seva pròpia ubicació de memòria. Tots els membres comparteixen la mateixa ubicació de memòria.
Mida La suma de les mides de tots els membres. La mida del membre més gran.
Ús Pot contenir valors en tots els membres simultàniament. Només un membre pot contenir un valor a la vegada.

Exercicis Pràctics

Exercici 1: Definició i Ús d'Una Unió

Descripció: Defineix una unió que pugui contenir un int, un float i un char. Declara una variable d'aquesta unió i assigna valors a cada membre, imprimint el valor després de cada assignació.

Solució:

#include <stdio.h>

union Exemple {
    int i;
    float f;
    char c;
};

int main() {
    union Exemple e;
    
    e.i = 10;
    printf("e.i = %d\n", e.i);
    
    e.f = 220.5;
    printf("e.f = %f\n", e.f);
    
    e.c = 'A';
    printf("e.c = %c\n", e.c);
    
    return 0;
}

Exercici 2: Comparació de Mida

Descripció: Defineix una estructura i una unió amb els mateixos membres (int, float, char). Imprimeix la mida de l'estructura i la unió utilitzant l'operador sizeof.

Solució:

#include <stdio.h>

struct Estructura {
    int i;
    float f;
    char c;
};

union Unio {
    int i;
    float f;
    char c;
};

int main() {
    printf("Mida de l'estructura: %lu bytes\n", sizeof(struct Estructura));
    printf("Mida de la unió: %lu bytes\n", sizeof(union Unio));
    
    return 0;
}

Sortida esperada (pot variar segons el sistema):

Mida de l'estructura: 12 bytes
Mida de la unió: 4 bytes

Errors Comuns

  1. Accés a Membres No Inicialitzats: Intentar accedir a un membre de la unió que no ha estat inicialitzat pot donar resultats inesperats.
  2. Confusió amb Estructures: Recorda que, a diferència de les estructures, només un membre de la unió pot contenir un valor a la vegada.

Consells Addicionals

  • Utilitza unions quan necessitis emmagatzemar diferents tipus de dades en la mateixa ubicació de memòria per estalviar espai.
  • Sigues conscient que només un membre de la unió pot ser utilitzat a la vegada, i l'assignació d'un nou valor a un membre sobreescriurà el valor anterior.

Conclusió

Les unions són una eina útil en C per gestionar diferents tipus de dades en la mateixa ubicació de memòria. Tot i que poden ser confuses al principi, la seva comprensió i ús adequat poden ajudar a optimitzar l'ús de memòria en els teus programes. En el següent tema, explorarem els camps de bits, una altra característica avançada de C que permet una gestió més precisa de la memòria.

Curs de Programació en C

Mòdul 1: Introducció al C

Mòdul 2: Tipus de Dades i Variables

Mòdul 3: Flux de Control

Mòdul 4: Funcions

Mòdul 5: Arrays i Strings

Mòdul 6: Punteres

Mòdul 7: Estructures i Unions

Mòdul 8: Assignació Dinàmica de Memòria

Mòdul 9: Gestió d'Arxius

Mòdul 10: Temes Avançats

Mòdul 11: Millors Pràctiques i Optimització

Mòdul 12: Projecte i Avaluació Final

© Copyright 2024. Tots els drets reservats