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
- Definició d'Unió: Una unió es defineix de manera similar a una estructura, però amb la paraula clau
union
. - Compartició de Memòria: Tots els membres d'una unió comparteixen la mateixa ubicació de memòria.
- Ús de Memòria: La mida d'una unió és igual a la mida del seu membre més gran.
- 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:
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:
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:
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):
Errors Comuns
- Accés a Membres No Inicialitzats: Intentar accedir a un membre de la unió que no ha estat inicialitzat pot donar resultats inesperats.
- 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
- Introducció a la Programació
- Configuració de l'Entorn de Desenvolupament
- Programa Hello World
- Sintaxi i Estructura Bàsiques
Mòdul 2: Tipus de Dades i Variables
Mòdul 3: Flux de Control
Mòdul 4: Funcions
- Introducció a les Funcions
- Arguments de Funció i Valors de Retorn
- Àmbit i Durada de les Variables
- Funcions Recursives
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
- Introducció a la Gestió d'Arxius
- Lectura i Escriptura d'Arxius
- Posicionament d'Arxius
- Gestió d'Errors en Operacions d'Arxius
Mòdul 10: Temes Avançats
- Directives del Preprocessador
- Arguments de Línia de Comandes
- Llistes d'Arguments Variables
- Multifil en C
Mòdul 11: Millors Pràctiques i Optimització
- Llegibilitat del Codi i Documentació
- Tècniques de Depuració
- Optimització del Rendiment
- Consideracions de Seguretat