Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

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 van car1.
  • car3->price of (*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

  1. Expertgids voor het correct dimensioneren van uw commerciële airconditioner voor optimale prestaties
  2. AI in Productie Markt Groeit naar $4,8 miljard in 2026, 28,1% CAGR
  3. Pneumatische klepdimensionering onder de knie: Een praktische gids
  4. Pijpverbindingen (Pipe Unions) Begrijpen: Definitie, Gebruik En Voordelen
  5. De Juiste Draaibankgrootte Voor Wapenmakerskiezen: Een Uitgebreide Gids
  6. De Juiste Luchtreservoirgrootte Kiezen: Prestaties & Efficiëntie Optimaliseren
  7. Industriële luchtcompressor dimensioneren: expert gids voor het selecteren van de juiste unit
  8. Professionele Gids Voor Het Veilig En Precies Zagen Van Aluminium Staafmateriaal
  9. C-unions: Efficiënt geheugenbeheer voor meerdere datatypes
  10. Java Enums meesteren: complete gids tot Enums & Enum klassen
  11. Java Enum constructors uitgelegd met praktisch voorbeeld