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: Efficiënt geheugenbeheer voor meerdere datatypes

Wat is een union?

union is een speciaal datatype dat verschillende typen in dezelfde geheugenlocatie kan opslaan. Alleen één lid kan op een gegeven moment een waarde bevatten. Bespaart geheugen bij wederzijds exclusieve data.

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

KenmerkStructUnion
GeheugenSom van leden (+ padding)Max van leden
Leden actiefAllemaal tegelijkÉén tegelijk
GebruikGerelateerde data groeperenWederzijds exclusieve data

C Taal

  1. Microprocessoren: de evolutie van stored-program computing
  2. Uitgebreide Op‑Amp Data: National Semiconductor & CA3130 Datasheets
  3. C++ datatypes begrijpen: fundamentals, modifiers en best practices
  4. C Datatypes Uitgelegd: int, float, char en Meer – Een Complete Gids
  5. C Unions uitgelegd: Definitie, gebruik en vergelijking met structuren
  6. C-datatypes begrijpen: Een complete gids
  7. C++ Datastructuren: Efficiënte Programma's Bouwen met Arrays, Structs en Meer
  8. Data Abstractie in C++ Beheersen: Ontwerp Vereenvoudigen met Interface-Implementatie Scheiding
  9. Data Encapsulatie in C++: Uw Code Beschermen
  10. MATLAB Datatypes: Uitgebreide Gids
  11. Python Datatypes onder de knie krijgen: Een praktische gids