single
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 je een variabele wilt die verschillende typen gegevens op verschillende momenten kan bevatten en tegelijkertijd geheugen bespaart.
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 is gelijk aan de grootte van het grootste lid.
Het belangrijkste gebruik van een union is het opleggen van verschillende typen gegevens op één gemeenschappelijk geheugengebied, oftewel de representatie van één geheugengebied als verschillende datatypes.
Omdat in de union de velden zich in dezelfde geheugenruimte bevinden, kunnen we dezelfde gegevens op verschillende manieren verwerken:
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 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 beginnen. Hierdoor kan sizeof(union Data) groter zijn dan 20, bijvoorbeeld 24 bytes.
Veeg om te beginnen met coderen
De union Data slaat elke waarde op als een int en biedt toegang tot dezelfde waarde als een char. De functie dient over de array te itereren en elke waarde zowel als geheel getal als als overeenkomstig ASCII-teken af te drukken.
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. - Ken het huidige element van de array toe aan het
int-lid van de union (data.a). - Druk de gehele getalwaarde
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.