C-unions: Efficiënt geheugenbeheer voor meerdere datatypes
Wat is een union?
Definiëren
union Data {
int i;
float f;
char str[20];
} data;
Geheugengrootte = grootste lid (hier 20 bytes voor str[20]).
Leden benaderen
Zelfde syntax als struct: . of -> (via pointer).
Foutief gebruik (tegelijkertijd schrijven)
union Data data;
data.i = 10;
data.f = 220.5;
strcpy(data.str, "C Programmeren");
printf("i: %d, f: %f, str: %s\n", data.i, data.f, data.str);
i: 1917853763 f: 4122360580327794860452759994368.000000 str: C Programmeren
i en f zijn gecorrumpeerd door laatste schrijfactie (strcpy).
Correct gebruik (één lid per keer)
union Data data;
data.i = 10;
printf("i: %d\n", data.i); // 10
data.f = 220.5;
printf("f: %f\n", data.f); // 220.5
strcpy(data.str, "C Programmeren");
printf("str: %s\n", data.str); // C Programmeren
Toepassingen
- Variant records (data kan int, float, of string zijn)
- Hardware registers met overlappende bitvelden
- Protocolparsing (union van struct en byte-array)
- Type-punning (voorzichtig! strict aliasing regels)
Union in struct (getagde union)
Combineer met enum om te weten welk lid actief is:
enum Type { INT, FLOAT, STRING };
struct Variant {
enum Type type;
union {
int i;
float f;
char *s;
} value;
};
Vergelijking Struct vs Union
| Kenmerk | Struct | Union |
|---|---|---|
| Geheugen | Som van leden (+ padding) | Max van leden |
| Leden actief | Allemaal tegelijk | Één tegelijk |
| Gebruik | Gerelateerde data groeperen | Wederzijds exclusieve data |
C Taal
- Microprocessoren: de evolutie van stored-program computing
- Uitgebreide Op‑Amp Data: National Semiconductor & CA3130 Datasheets
- C++ datatypes begrijpen: fundamentals, modifiers en best practices
- C Datatypes Uitgelegd: int, float, char en Meer – Een Complete Gids
- C Unions uitgelegd: Definitie, gebruik en vergelijking met structuren
- C-datatypes begrijpen: Een complete gids
- C++ Datastructuren: Efficiënte Programma's Bouwen met Arrays, Structs en Meer
- Data Abstractie in C++ Beheersen: Ontwerp Vereenvoudigen met Interface-Implementatie Scheiding
- Data Encapsulatie in C++: Uw Code Beschermen
- MATLAB Datatypes: Uitgebreide Gids
- Python Datatypes onder de knie krijgen: Een praktische gids