Anonym Struktur och Union
Programmeringsspråket C har anonyma strukturer och unioner, vilket möjliggör definition av strukturer och unioner utan att ange ett namn.
Vad är anonyma strukturer och unioner?
En anonym union eller anonym struktur har ingen identifierare. På grund av detta kan du inte skapa fristående variabler av den typen; de används istället vanligtvis inuti andra strukturer.
// Anonymous union
union {
char x;
int y;
};
// Anonymous structure
struct {
char x;
int y;
};
Anonyma strukturer och unioner är särskilt användbara när de är nästlade och endast kommer att användas i det sammanhang där de deklareras.
Praktiskt exempel
Tänk dig ett scenario där du vill representera en ASCII-tabell där samma värde kan tolkas som en numerisk kod eller en teckensymbol. Genom att använda en anonym union inuti en struktur kan du effektivt växla mellan dessa två tolkningar.
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 detta exempel innehåller strukturen ASCIItable en anonym union. Unionen möjliggör att samma minnesutrymme kan tolkas antingen som ett numeriskt värde (num) eller som ett tecken (symbol).
När AZtable.num sätts till 65 motsvarar det ASCII-koden för 'A'. Med samma minnesutrymme representerar AZtable.symbol också 'A'. Genom att iterera 26 gånger kan vi skriva ut alla versaler tillsammans med deras ASCII-koder, vilket visar hur samma minne kan representera flera vyer av data.
Swipe to start coding
Skapa en funktion findFurthestPoint som hittar den punkt som ligger längst från origo (0,0) i ett tvådimensionellt plan. Varje punkt representeras av en struktur Point som innehåller en anonym nästlad struktur med fälten x och y.
Funktionen ska beräkna det euklidiska avståndet för varje punkt med formeln:
distance = sqrt(x*x + y*y)
och returnera indexet för den punkt som har det största avståndet.
- Inuti funktionen, beräkna avståndet från origo till den första punkten med formeln.
- Initiera
maxIndextill0. - Använd en
for-loop fråni = 1tilli = nför att iterera genom punkterna. - För varje punkt, beräkna dess avstånd med ovanstående formel.
- Om avståndet är större än
maxDistance, uppdateramaxDistanceochmaxIndextill det aktuella avståndet och indexet. - Efter loopen, returnera
maxIndexsom indexet för den punkt som ligger längst bort.
Lösning
Tack för dina kommentarer!
single
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Can you show me the code for the ASCIItable example?
How do I access the members of an anonymous union or struct in C?
What are some other practical uses for anonymous structs and unions?
Fantastiskt!
Completion betyg förbättrat till 4.35
Anonym Struktur och Union
Svep för att visa menyn
Programmeringsspråket C har anonyma strukturer och unioner, vilket möjliggör definition av strukturer och unioner utan att ange ett namn.
Vad är anonyma strukturer och unioner?
En anonym union eller anonym struktur har ingen identifierare. På grund av detta kan du inte skapa fristående variabler av den typen; de används istället vanligtvis inuti andra strukturer.
// Anonymous union
union {
char x;
int y;
};
// Anonymous structure
struct {
char x;
int y;
};
Anonyma strukturer och unioner är särskilt användbara när de är nästlade och endast kommer att användas i det sammanhang där de deklareras.
Praktiskt exempel
Tänk dig ett scenario där du vill representera en ASCII-tabell där samma värde kan tolkas som en numerisk kod eller en teckensymbol. Genom att använda en anonym union inuti en struktur kan du effektivt växla mellan dessa två tolkningar.
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 detta exempel innehåller strukturen ASCIItable en anonym union. Unionen möjliggör att samma minnesutrymme kan tolkas antingen som ett numeriskt värde (num) eller som ett tecken (symbol).
När AZtable.num sätts till 65 motsvarar det ASCII-koden för 'A'. Med samma minnesutrymme representerar AZtable.symbol också 'A'. Genom att iterera 26 gånger kan vi skriva ut alla versaler tillsammans med deras ASCII-koder, vilket visar hur samma minne kan representera flera vyer av data.
Swipe to start coding
Skapa en funktion findFurthestPoint som hittar den punkt som ligger längst från origo (0,0) i ett tvådimensionellt plan. Varje punkt representeras av en struktur Point som innehåller en anonym nästlad struktur med fälten x och y.
Funktionen ska beräkna det euklidiska avståndet för varje punkt med formeln:
distance = sqrt(x*x + y*y)
och returnera indexet för den punkt som har det största avståndet.
- Inuti funktionen, beräkna avståndet från origo till den första punkten med formeln.
- Initiera
maxIndextill0. - Använd en
for-loop fråni = 1tilli = nför att iterera genom punkterna. - För varje punkt, beräkna dess avstånd med ovanstående formel.
- Om avståndet är större än
maxDistance, uppdateramaxDistanceochmaxIndextill det aktuella avståndet och indexet. - Efter loopen, returnera
maxIndexsom indexet för den punkt som ligger längst bort.
Lösning
Tack för dina kommentarer!
single