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 | Avanceret Brug af Structs
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
Beherskelse af C Structs

bookAnonym Struktur og Union

C-programmeringssproget har anonyme strukturer og unions, som giver mulighed for at definere strukturer og unions uden at angive et navn.

Hvad er anonyme strukturer og unions?

En anonym union eller anonym struktur har ikke en identifikator. Derfor kan du ikke oprette selvstændige variabler af denne type; de bruges typisk inden i andre strukturer.

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

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

Anonyme structs og unions er særligt nyttige, når de er indlejrede og kun vil blive brugt i den sammenhæng, hvor de er erklæret.

Praktisk eksempel

Forestil dig et scenarie, hvor du ønsker at repræsentere en ASCII-tabel, hvor den samme værdi kan tolkes som en numerisk kode eller et tegnsymbol. Ved at bruge en anonym union inde i en struktur kan du effektivt skifte mellem disse to fortolkninger.

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 eksempel indeholder strukturen ASCIItable en anonym union. Unionen muliggør, at den samme hukommelse kan fortolkes enten som en numerisk værdi (num) eller som et tegn (symbol).

Når AZtable.num sættes til 65, svarer det til ASCII-koden for 'A'. Ved at bruge den samme hukommelse repræsenterer AZtable.symbol også 'A'. Ved at iterere 26 gange kan vi udskrive alle store bogstaver sammen med deres ASCII-koder, hvilket demonstrerer, hvordan den samme hukommelse kan repræsentere flere visninger af dataene.

Opgave

Swipe to start coding

Opret en funktion findFurthestPoint, der finder det punkt, som er længst væk fra origo (0,0) i et 2D-plan. Hvert punkt repræsenteres af en struktur Point, der indeholder en anonym indlejret struktur med felterne x og y.

Funktionen skal beregne den euklidiske afstand for hvert punkt ved hjælp af formlen:

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

og returnere indekset for det punkt, der har den største afstand.

  1. Beregn inden i funktionen afstanden fra det første punkt til origo ved hjælp af formlen.
  2. Initialiser maxIndex til 0.
  3. Brug en for-løkke fra i = 1 til i = n for at iterere gennem punkterne.
  4. For hvert punkt beregnes afstanden ved hjælp af ovenstående formel.
  5. Hvis afstanden er større end maxDistance, opdateres maxDistance og maxIndex til den aktuelle afstand og indeks.
  6. Efter løkken returneres maxIndex som indekset for det fjerneste punkt.

Løsning

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 3
single

single

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

close

bookAnonym Struktur og Union

Stryg for at vise menuen

C-programmeringssproget har anonyme strukturer og unions, som giver mulighed for at definere strukturer og unions uden at angive et navn.

Hvad er anonyme strukturer og unions?

En anonym union eller anonym struktur har ikke en identifikator. Derfor kan du ikke oprette selvstændige variabler af denne type; de bruges typisk inden i andre strukturer.

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

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

Anonyme structs og unions er særligt nyttige, når de er indlejrede og kun vil blive brugt i den sammenhæng, hvor de er erklæret.

Praktisk eksempel

Forestil dig et scenarie, hvor du ønsker at repræsentere en ASCII-tabel, hvor den samme værdi kan tolkes som en numerisk kode eller et tegnsymbol. Ved at bruge en anonym union inde i en struktur kan du effektivt skifte mellem disse to fortolkninger.

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 eksempel indeholder strukturen ASCIItable en anonym union. Unionen muliggør, at den samme hukommelse kan fortolkes enten som en numerisk værdi (num) eller som et tegn (symbol).

Når AZtable.num sættes til 65, svarer det til ASCII-koden for 'A'. Ved at bruge den samme hukommelse repræsenterer AZtable.symbol også 'A'. Ved at iterere 26 gange kan vi udskrive alle store bogstaver sammen med deres ASCII-koder, hvilket demonstrerer, hvordan den samme hukommelse kan repræsentere flere visninger af dataene.

Opgave

Swipe to start coding

Opret en funktion findFurthestPoint, der finder det punkt, som er længst væk fra origo (0,0) i et 2D-plan. Hvert punkt repræsenteres af en struktur Point, der indeholder en anonym indlejret struktur med felterne x og y.

Funktionen skal beregne den euklidiske afstand for hvert punkt ved hjælp af formlen:

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

og returnere indekset for det punkt, der har den største afstand.

  1. Beregn inden i funktionen afstanden fra det første punkt til origo ved hjælp af formlen.
  2. Initialiser maxIndex til 0.
  3. Brug en for-løkke fra i = 1 til i = n for at iterere gennem punkterne.
  4. For hvert punkt beregnes afstanden ved hjælp af ovenstående formel.
  5. Hvis afstanden er større end maxDistance, opdateres maxDistance og maxIndex til den aktuelle afstand og indeks.
  6. Efter løkken returneres maxIndex som indekset for det fjerneste punkt.

Løsning

Switch to desktopSkift til skrivebord for at øve i den virkelige verdenFortsæt der, hvor du er, med en af nedenstående muligheder
Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 3
single

single

some-alt