Unies
Een union is een door de gebruiker gedefinieerd gegevenstype in C, vergelijkbaar met een structuur. Het belangrijkste verschil is dat alle leden dezelfde geheugenlocatie delen. Op elk moment kan slechts één lid een waarde opslaan.
Unions worden zelden gebruikt, maar zijn nuttig wanneer een variabele verschillende typen gegevens op verschillende momenten moet kunnen bevatten en geheugenbesparing gewenst is.
De gegevens bevinden zich in hetzelfde geheugengebied voor alle leden van de union. Dit betekent dat alle leden van de union hetzelfde geheugenadres delen en de grootte van de union gelijk is aan de grootte van het grootste lid.
Het belangrijkste gebruik van een union is het opleggen van verschillende gegevenstypen op één gemeenschappelijk geheugenbereik, oftewel de representatie van één geheugenruimte als verschillende gegevenstypen.
Aangezien bij een union de velden zich in dezelfde geheugencel bevinden, kan dezelfde data op verschillende manieren worden verwerkt:
main.c
12345678910111213141516#include <stdio.h> // declaring a union union Data { int a; char b; } data; int main() { data.a = 77; // assigning a value to variable a printf("Value of data.a: %d\n", data.a); printf("Value of data.b: %c\n", data.b); return 0; }
In het voorbeeld delen de variabelen data.a en data.b hetzelfde geheugen. We hebben de waarde 77 toegekend aan a, maar we kunnen dezelfde bytes interpreteren als een teken in b.
Uitlijning in unions
Net als structuren gebruiken unions ook uitlijning en opvulling. De compiler kan extra bytes toevoegen zodat elk lid op de juiste geheugenboundary begint.
main.c
12345678910111213#include <stdio.h> union Data { int a; // 4 bytes double b; // 8 bytes char c[20]; // 20 bytes }; int main() { printf("Size of union Data: %zu bytes\n", sizeof(union Data)); return 0; }
Een union kan slechts één waarde tegelijk opslaan en de grootte ervan is gelijk aan de grootte van het grootste lid. In het voorbeeld met int a (4 bytes), double b (8 bytes) en char c[20], is de minimale grootte van de union 20 bytes. De compiler kan echter extra bytes toevoegen voor uitlijning, zodat double of int op de juiste geheugenboundary begint. Hierdoor kan sizeof(union Data) groter zijn dan 20, bijvoorbeeld 24 bytes.
Swipe to start coding
De union Data slaat elke waarde op als een int en biedt toegang tot dezelfde waarde als een char. De functie moet over de array itereren en elke waarde zowel als geheel getal als als overeenkomstig ASCII-teken afdrukken.
De functie accepteert twee parameters: een array van gehele getallen (values) en de lengte ervan (n).
- Gebruik een
union Datamet twee leden:int aenchar b. - Itereer in een
for-lus over de array-elementen van0totn. - Wijs het huidige element van de array toe aan het
int-lid van de union (data.a). - Druk de gehele waarde
data.aen de tekenrepresentatiedata.baf.
Voorbeeld
{65, 66, 67, 68, 69} =>
Value as int: 65, Value as char: A
Value as int: 66, Value as char: B
Value as int: 67, Value as char: C
Value as int: 68, Value as char: D
Value as int: 69, Value as char: E
Oplossing
Bedankt voor je feedback!
single
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Geweldig!
Completion tarief verbeterd naar 4.35
Unies
Veeg om het menu te tonen
Een union is een door de gebruiker gedefinieerd gegevenstype in C, vergelijkbaar met een structuur. Het belangrijkste verschil is dat alle leden dezelfde geheugenlocatie delen. Op elk moment kan slechts één lid een waarde opslaan.
Unions worden zelden gebruikt, maar zijn nuttig wanneer een variabele verschillende typen gegevens op verschillende momenten moet kunnen bevatten en geheugenbesparing gewenst is.
De gegevens bevinden zich in hetzelfde geheugengebied voor alle leden van de union. Dit betekent dat alle leden van de union hetzelfde geheugenadres delen en de grootte van de union gelijk is aan de grootte van het grootste lid.
Het belangrijkste gebruik van een union is het opleggen van verschillende gegevenstypen op één gemeenschappelijk geheugenbereik, oftewel de representatie van één geheugenruimte als verschillende gegevenstypen.
Aangezien bij een union de velden zich in dezelfde geheugencel bevinden, kan dezelfde data op verschillende manieren worden verwerkt:
main.c
12345678910111213141516#include <stdio.h> // declaring a union union Data { int a; char b; } data; int main() { data.a = 77; // assigning a value to variable a printf("Value of data.a: %d\n", data.a); printf("Value of data.b: %c\n", data.b); return 0; }
In het voorbeeld delen de variabelen data.a en data.b hetzelfde geheugen. We hebben de waarde 77 toegekend aan a, maar we kunnen dezelfde bytes interpreteren als een teken in b.
Uitlijning in unions
Net als structuren gebruiken unions ook uitlijning en opvulling. De compiler kan extra bytes toevoegen zodat elk lid op de juiste geheugenboundary begint.
main.c
12345678910111213#include <stdio.h> union Data { int a; // 4 bytes double b; // 8 bytes char c[20]; // 20 bytes }; int main() { printf("Size of union Data: %zu bytes\n", sizeof(union Data)); return 0; }
Een union kan slechts één waarde tegelijk opslaan en de grootte ervan is gelijk aan de grootte van het grootste lid. In het voorbeeld met int a (4 bytes), double b (8 bytes) en char c[20], is de minimale grootte van de union 20 bytes. De compiler kan echter extra bytes toevoegen voor uitlijning, zodat double of int op de juiste geheugenboundary begint. Hierdoor kan sizeof(union Data) groter zijn dan 20, bijvoorbeeld 24 bytes.
Swipe to start coding
De union Data slaat elke waarde op als een int en biedt toegang tot dezelfde waarde als een char. De functie moet over de array itereren en elke waarde zowel als geheel getal als als overeenkomstig ASCII-teken afdrukken.
De functie accepteert twee parameters: een array van gehele getallen (values) en de lengte ervan (n).
- Gebruik een
union Datamet twee leden:int aenchar b. - Itereer in een
for-lus over de array-elementen van0totn. - Wijs het huidige element van de array toe aan het
int-lid van de union (data.a). - Druk de gehele waarde
data.aen de tekenrepresentatiedata.baf.
Voorbeeld
{65, 66, 67, 68, 69} =>
Value as int: 65, Value as char: A
Value as int: 66, Value as char: B
Value as int: 67, Value as char: C
Value as int: 68, Value as char: D
Value as int: 69, Value as char: E
Oplossing
Bedankt voor je feedback!
single