Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Unies | Structs en Geheugen Begrijpen
C-Structs Beheersen

bookUnies

Note
Definitie

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

main.c

copy
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

main.c

copy
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.

Taak

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).

  1. Gebruik een union Data met twee leden: int a en char b.
  2. Itereer in een for-lus over de array-elementen van 0 tot n.
  3. Wijs het huidige element van de array toe aan het int-lid van de union (data.a).
  4. Druk de gehele waarde data.a en de tekenrepresentatie data.b af.

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

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 3
single

single

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

close

bookUnies

Veeg om het menu te tonen

Note
Definitie

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

main.c

copy
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

main.c

copy
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.

Taak

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).

  1. Gebruik een union Data met twee leden: int a en char b.
  2. Itereer in een for-lus over de array-elementen van 0 tot n.
  3. Wijs het huidige element van de array toe aan het int-lid van de union (data.a).
  4. Druk de gehele waarde data.a en de tekenrepresentatie data.b af.

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

Switch to desktopSchakel over naar desktop voor praktijkervaringGa verder vanaf waar je bent met een van de onderstaande opties
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 3. Hoofdstuk 3
single

single

some-alt