Anonym 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
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.
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.
- Beregn inden i funktionen afstanden fra det første punkt til origo ved hjælp af formlen.
- Initialiser
maxIndextil0. - Brug en
for-løkke frai = 1tili = nfor at iterere gennem punkterne. - For hvert punkt beregnes afstanden ved hjælp af ovenstående formel.
- Hvis afstanden er større end
maxDistance, opdateresmaxDistanceogmaxIndextil den aktuelle afstand og indeks. - Efter løkken returneres
maxIndexsom indekset for det fjerneste punkt.
Løsning
Tak for dine kommentarer!
single
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Fantastisk!
Completion rate forbedret til 4.35
Anonym 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
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.
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.
- Beregn inden i funktionen afstanden fra det første punkt til origo ved hjælp af formlen.
- Initialiser
maxIndextil0. - Brug en
for-løkke frai = 1tili = nfor at iterere gennem punkterne. - For hvert punkt beregnes afstanden ved hjælp af ovenstående formel.
- Hvis afstanden er større end
maxDistance, opdateresmaxDistanceogmaxIndextil den aktuelle afstand og indeks. - Efter løkken returneres
maxIndexsom indekset for det fjerneste punkt.
Løsning
Tak for dine kommentarer!
single