C Unions uitgelegd: Definitie, gebruik en vergelijking met structuren
C Unions uitgelegd
Leer hoe je C unions definieert, aanmaakt en benadert, en ontdek waarom ze verschillen van structuren in geheugenlayout en toepassing.
Een union is een door de gebruiker gedefinieerd type in C dat, in tegenstelling tot een struct, maar één van zijn lid-waarden tegelijk kan bevatten. Dit maakt unions ideaal voor geheugen-efficiënte datarepresentaties en type-punning in low-level programmeren.
Een union definiëren
Gebruik het union keyword om een nieuw type te declareren. Bijvoorbeeld:
union Car {
char name[50];
int price;
};
De bovenstaande code creëert een afgeleid type union Car dat ofwel een 50-karakter string ofwel een integer prijs kan opslaan.
Union-variabelen aanmaken
Het definiëren van een union allokeert geen geheugen. Om het te gebruiken, declareer je variabelen van dat type:
union Car car1, car2, *car3;
Alternatief kun je de definitie en variabeledeclaratie combineren:
union Car {
char name[50];
int price;
} car1, car2, *car3;
In beide voorbeelden zijn car1 en car2 union-instanties, terwijl car3 een pointer naar een union is.
Union-leden benaderen
Gebruik de dot (.) operator voor directe toegang en de arrow (->) voor pointer-toegang:
car1.price– benadert het price veld vancar1.car3->priceof(*car3).price– benadert price via een pointer.
Unions vs. Structuren
Terwijl structs voldoende ruimte alloceren voor alle leden, is de grootte van een union gelijk aan de grootte van het grootste lid. Bekijk deze vergelijking:
#include <stdio.h>
union UnionJob {
char name[32];
float salary;
int workerNo;
} uJob;
struct StructJob {
char name[32];
float salary;
int workerNo;
} sJob;
int main() {
printf("grootte van union = %zu bytes\n", sizeof(uJob));
printf("grootte van structuur = %zu bytes", sizeof(sJob));
return 0;
}
Output:
grootte van union = 32 grootte van structuur = 40
Hier bezet de struct 40 bytes (32 + 4 + 4), terwijl de union slechts 32 bytes inneemt – de grootte van het grootste lid, name[32]. Alle union-leden delen hetzelfde geheugengebied.
Praktisch voorbeeld: Lid overschrijven
#include <stdio.h>
union Job {
float salary;
int workerNo;
} j;
int main() {
j.salary = 12.3;
j.workerNo = 100; // overschrijft de vorige waarde
printf("Salaris = %.1f\n", j.salary);
printf("Aantal werknemers = %d", j.workerNo);
return 0;
}
Output:
Salaris = 0.0 Aantal werknemers = 100
Omdat salary en workerNo hetzelfde geheugen delen, wist het schrijven naar de ene de andere.
Om real-world use cases te verkennen, lees Waarom hebben we C Unions nodig?.
C Taal
- Expertgids voor het correct dimensioneren van uw commerciële airconditioner voor optimale prestaties
- AI in Productie Markt Groeit naar $4,8 miljard in 2026, 28,1% CAGR
- Pneumatische klepdimensionering onder de knie: Een praktische gids
- Pijpverbindingen (Pipe Unions) Begrijpen: Definitie, Gebruik En Voordelen
- De Juiste Draaibankgrootte Voor Wapenmakerskiezen: Een Uitgebreide Gids
- De Juiste Luchtreservoirgrootte Kiezen: Prestaties & Efficiëntie Optimaliseren
- Industriële luchtcompressor dimensioneren: expert gids voor het selecteren van de juiste unit
- Professionele Gids Voor Het Veilig En Precies Zagen Van Aluminium Staafmateriaal
- C-unions: Efficiënt geheugenbeheer voor meerdere datatypes
- Java Enums meesteren: complete gids tot Enums & Enum klassen
- Java Enum constructors uitgelegd met praktisch voorbeeld