Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Anonym Struktur og Union | Avansert Bruk av Struct
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Mestre C-strukturer

bookAnonym Struktur og Union

Programmeringsspråket C har anonyme strukturer og unioner, som gir mulighet til å definere strukturer og unioner uten å angi et navn.

Hva er anonyme strukturer og unioner?

En anonym union eller anonym struktur har ikke en identifikator. På grunn av dette kan du ikke opprette frittstående variabler av denne typen; de brukes vanligvis inne i andre strukturer.

// Anonymous union
union {
    char x;
    int y;
};

// Anonymous structure
struct {
    char x;
    int y;
};

Anonyme strukturer og unioner er spesielt nyttige når de er nestet og kun skal brukes i konteksten der de er deklarert.

Praktisk eksempel

Tenk deg et scenario der du ønsker å representere en ASCII-tabell hvor den samme verdien kan tolkes som enten en numerisk kode eller et tegnsymbol. Ved å bruke en anonym union inne i en struktur kan du effektivt veksle mellom disse to tolkningene.

main.c

main.c

copy
123456789101112131415161718192021
#include <stdio.h> struct ASCIItable { // Anonymous union allows dual representation of the same memory union { char symbol; int num; }; }; int main() { struct ASCIItable AZtable; AZtable.num = 65; // ASCII code for 'A' // Print all uppercase letters and their numeric codes for (int i = 0; i < 26; i++) { printf("num = %d | symbol = `%c`\n", AZtable.num + i, AZtable.symbol + i); } return 0; }

I dette eksemplet inneholder strukturen ASCIItable en anonym union. Unionen gjør det mulig å tolke det samme minnet enten som en numerisk verdi (num) eller som et tegn (symbol).

Når AZtable.num settes til 65, tilsvarer det ASCII-koden for 'A'. Ved å bruke det samme minnet, representerer AZtable.symbol også 'A'. Ved å iterere 26 ganger kan vi skrive ut alle store bokstaver sammen med deres ASCII-koder, noe som demonstrerer hvordan samme minne kan representere flere visninger av dataene.

Oppgave

Swipe to start coding

Lag en funksjon findFurthestPoint som finner punktet som er lengst fra origo (0,0) i et 2D-plan. Hvert punkt representeres av en struktur Point som inneholder en anonym nestet struktur med feltene x og y.

Funksjonen skal beregne Euklidsk avstand for hvert punkt ved å bruke formelen:

distance = sqrt(x*x + y*y)

og returnere indeksen til punktet med størst avstand.

  1. Beregn avstanden fra det første punktet til origo inne i funksjonen ved hjelp av formelen.
  2. Initialiser maxIndex til 0.
  3. Bruk en for-løkke fra i = 1 til i = n for å iterere gjennom punktene.
  4. For hvert punkt, beregn avstanden ved å bruke formelen ovenfor.
  5. Hvis avstanden er større enn maxDistance, oppdater maxDistance og maxIndex til den nåværende avstanden og indeksen.
  6. Etter løkken, returner maxIndex som indeksen til det punktet som er lengst unna.

Løsning

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. 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

close

bookAnonym Struktur og Union

Sveip for å vise menyen

Programmeringsspråket C har anonyme strukturer og unioner, som gir mulighet til å definere strukturer og unioner uten å angi et navn.

Hva er anonyme strukturer og unioner?

En anonym union eller anonym struktur har ikke en identifikator. På grunn av dette kan du ikke opprette frittstående variabler av denne typen; de brukes vanligvis inne i andre strukturer.

// Anonymous union
union {
    char x;
    int y;
};

// Anonymous structure
struct {
    char x;
    int y;
};

Anonyme strukturer og unioner er spesielt nyttige når de er nestet og kun skal brukes i konteksten der de er deklarert.

Praktisk eksempel

Tenk deg et scenario der du ønsker å representere en ASCII-tabell hvor den samme verdien kan tolkes som enten en numerisk kode eller et tegnsymbol. Ved å bruke en anonym union inne i en struktur kan du effektivt veksle mellom disse to tolkningene.

main.c

main.c

copy
123456789101112131415161718192021
#include <stdio.h> struct ASCIItable { // Anonymous union allows dual representation of the same memory union { char symbol; int num; }; }; int main() { struct ASCIItable AZtable; AZtable.num = 65; // ASCII code for 'A' // Print all uppercase letters and their numeric codes for (int i = 0; i < 26; i++) { printf("num = %d | symbol = `%c`\n", AZtable.num + i, AZtable.symbol + i); } return 0; }

I dette eksemplet inneholder strukturen ASCIItable en anonym union. Unionen gjør det mulig å tolke det samme minnet enten som en numerisk verdi (num) eller som et tegn (symbol).

Når AZtable.num settes til 65, tilsvarer det ASCII-koden for 'A'. Ved å bruke det samme minnet, representerer AZtable.symbol også 'A'. Ved å iterere 26 ganger kan vi skrive ut alle store bokstaver sammen med deres ASCII-koder, noe som demonstrerer hvordan samme minne kan representere flere visninger av dataene.

Oppgave

Swipe to start coding

Lag en funksjon findFurthestPoint som finner punktet som er lengst fra origo (0,0) i et 2D-plan. Hvert punkt representeres av en struktur Point som inneholder en anonym nestet struktur med feltene x og y.

Funksjonen skal beregne Euklidsk avstand for hvert punkt ved å bruke formelen:

distance = sqrt(x*x + y*y)

og returnere indeksen til punktet med størst avstand.

  1. Beregn avstanden fra det første punktet til origo inne i funksjonen ved hjelp av formelen.
  2. Initialiser maxIndex til 0.
  3. Bruk en for-løkke fra i = 1 til i = n for å iterere gjennom punktene.
  4. For hvert punkt, beregn avstanden ved å bruke formelen ovenfor.
  5. Hvis avstanden er større enn maxDistance, oppdater maxDistance og maxIndex til den nåværende avstanden og indeksen.
  6. Etter løkken, returner maxIndex som indeksen til det punktet som er lengst unna.

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 4. Kapittel 3
single

single

some-alt