Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Unioner | Forståelse av Structs og Minne
Mestre C-strukturer

bookUnioner

Note
Definisjon

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

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; }

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

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; }

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.

Oppgave

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

  1. Bruk en union Data med to medlemmer: int a og char b.
  2. I en for-løkke, iterer over elementene i arrayet fra 0 til n.
  3. Tildel det nåværende elementet i arrayet til int-medlemmet i unionen (data.a).
  4. Skriv ut heltallsverdien data.a og tegnrepresentasjonen data.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

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 3
single

single

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

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?

close

bookUnioner

Sveip for å vise menyen

Note
Definisjon

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

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; }

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

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; }

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.

Oppgave

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

  1. Bruk en union Data med to medlemmer: int a og char b.
  2. I en for-løkke, iterer over elementene i arrayet fra 0 til n.
  3. Tildel det nåværende elementet i arrayet til int-medlemmet i unionen (data.a).
  4. Skriv ut heltallsverdien data.a og tegnrepresentasjonen data.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

Switch to desktopBytt til skrivebordet for virkelighetspraksisFortsett der du er med et av alternativene nedenfor
Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 3
single

single

some-alt