Unioner
En union er en brukerdefinert datatyp i C, lik en struktur. Hovedforskjellen er at alle medlemmene deler samme minneplassering. Til enhver tid kan kun ett medlem lagre en verdi.
Unioner brukes sjelden, men de er nyttige når du ønsker en variabel som kan inneholde forskjellige datatyper til ulike tider og samtidig spare minne.
Dataene ligger i det samme minneområdet for alle medlemmene i unionen. Dette betyr at alle medlemmene i unionen deler samme minneadresse, og størrelsen på unionen er lik størrelsen til det største medlemmet.
Hovedformålet med en union er å pålegge ulike datatyper på ett felles minneområde, det vil si å representere ett minneområde som forskjellige datatyper.
Siden feltene i en union ligger i samme minnecelle, kan vi behandle de samme dataene på ulike måter:
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; }
I eksemplet deler variablene data.a og data.b samme minneområde. Vi tildelte verdien 77 til a, men vi kan tolke de samme bytene som et tegn i b.
Justering i unions
Akkurat som strukturer, bruker unions også justering og utfylling. Kompilatoren kan legge til ekstra byte slik at hvert medlem starter på riktig minnegrense.
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; }
En union kan kun lagre én verdi om gangen, og størrelsen er lik størrelsen til det største medlemmet. I eksempelet med int a (4 byte), double b (8 byte) og char c[20], er minimumsstørrelsen på unionen 20 byte. Kompilatoren kan imidlertid legge til ekstra byte for justering, slik at double eller int starter på riktig minnegrense. Som et resultat kan sizeof(union Data) være større enn 20, for eksempel 24 byte.
Swipe to start coding
Unionen Data lagrer hver verdi som en int og gir tilgang til den samme verdien som en char. Funksjonen skal iterere over arrayet og skrive ut hver verdi både som et heltall og som tilsvarende ASCII-tegn.
Funksjonen tar to parametere: et array av heltall (values) og dets lengde (n).
- Bruk en
union Datamed to medlemmer:int aogchar b. - I en
for-løkke, iterer over elementene i arrayet fra0tiln. - Tildel det nåværende elementet i arrayet til
int-medlemmet i unionen (data.a). - Skriv ut heltallsverdien
data.aog tegnrepresentasjonendata.b.
Eksempel
{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
Løsning
Takk for tilbakemeldingene dine!
single
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Can you explain more about how unions save memory compared to structs?
What are some practical examples where using a union is beneficial?
How does alignment and padding affect the size of a union?
Fantastisk!
Completion rate forbedret til 4.35
Unioner
Sveip for å vise menyen
En union er en brukerdefinert datatyp i C, lik en struktur. Hovedforskjellen er at alle medlemmene deler samme minneplassering. Til enhver tid kan kun ett medlem lagre en verdi.
Unioner brukes sjelden, men de er nyttige når du ønsker en variabel som kan inneholde forskjellige datatyper til ulike tider og samtidig spare minne.
Dataene ligger i det samme minneområdet for alle medlemmene i unionen. Dette betyr at alle medlemmene i unionen deler samme minneadresse, og størrelsen på unionen er lik størrelsen til det største medlemmet.
Hovedformålet med en union er å pålegge ulike datatyper på ett felles minneområde, det vil si å representere ett minneområde som forskjellige datatyper.
Siden feltene i en union ligger i samme minnecelle, kan vi behandle de samme dataene på ulike måter:
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; }
I eksemplet deler variablene data.a og data.b samme minneområde. Vi tildelte verdien 77 til a, men vi kan tolke de samme bytene som et tegn i b.
Justering i unions
Akkurat som strukturer, bruker unions også justering og utfylling. Kompilatoren kan legge til ekstra byte slik at hvert medlem starter på riktig minnegrense.
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; }
En union kan kun lagre én verdi om gangen, og størrelsen er lik størrelsen til det største medlemmet. I eksempelet med int a (4 byte), double b (8 byte) og char c[20], er minimumsstørrelsen på unionen 20 byte. Kompilatoren kan imidlertid legge til ekstra byte for justering, slik at double eller int starter på riktig minnegrense. Som et resultat kan sizeof(union Data) være større enn 20, for eksempel 24 byte.
Swipe to start coding
Unionen Data lagrer hver verdi som en int og gir tilgang til den samme verdien som en char. Funksjonen skal iterere over arrayet og skrive ut hver verdi både som et heltall og som tilsvarende ASCII-tegn.
Funksjonen tar to parametere: et array av heltall (values) og dets lengde (n).
- Bruk en
union Datamed to medlemmer:int aogchar b. - I en
for-løkke, iterer over elementene i arrayet fra0tiln. - Tildel det nåværende elementet i arrayet til
int-medlemmet i unionen (data.a). - Skriv ut heltallsverdien
data.aog tegnrepresentasjonendata.b.
Eksempel
{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
Løsning
Takk for tilbakemeldingene dine!
single