Anonieme Struct en Union
De programmeertaal C beschikt over anonieme structuren en unies, waarmee het mogelijk is om structuren en unies te definiëren zonder een naam op te geven.
Wat zijn anonieme structuren en unies?
Een anonieme unie of anonieme structuur heeft geen identificatie. Hierdoor kunnen er geen op zichzelf staande variabelen van dat type worden aangemaakt; ze worden doorgaans gebruikt binnen andere structuren.
// Anonymous union
union {
char x;
int y;
};
// Anonymous structure
struct {
char x;
int y;
};
Anonieme structs en unions zijn bijzonder nuttig wanneer ze genest zijn en alleen gebruikt worden in de context waarin ze gedeclareerd zijn.
Praktisch voorbeeld
Stel je een situatie voor waarin je een ASCII-tabel wilt weergeven waarbij dezelfde waarde zowel als numerieke code als als karakter symbool geïnterpreteerd kan worden. Door een anonieme union binnen een structuur te gebruiken, kun je efficiënt tussen deze twee interpretaties schakelen.
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; }
In dit voorbeeld bevat de structuur ASCIItable een anonieme unie. De unie maakt het mogelijk om hetzelfde geheugen te interpreteren als een numerieke waarde (num) of als een teken (symbol).
Wanneer AZtable.num wordt ingesteld op 65, komt dit overeen met de ASCII-code voor 'A'. Met hetzelfde geheugen vertegenwoordigt AZtable.symbol ook 'A'. Door 26 keer te itereren, kunnen alle hoofdletters samen met hun ASCII-codes worden weergegeven, waarmee wordt aangetoond hoe hetzelfde geheugen meerdere weergaven van de gegevens kan vertegenwoordigen.
Swipe to start coding
Maak een functie findFurthestPoint die het punt vindt dat het verst van de oorsprong (0,0) ligt in een 2D-vlak. Elk punt wordt weergegeven door een structuur Point die een anonieme geneste structuur bevat met de velden x en y.
De functie moet de Euclidische afstand voor elk punt berekenen met de formule:
distance = sqrt(x*x + y*y)
en retourneert de index van het punt met de grootste afstand.
- Bereken binnen de functie de afstand van het eerste punt tot de oorsprong met de formule.
- Initialiseer
maxIndexop0. - Gebruik een
for-lus vani = 1toti = nom door de punten te itereren. - Bereken voor elk punt de afstand met bovenstaande formule.
- Als de afstand groter is dan
maxDistance, werk danmaxDistanceenmaxIndexbij naar de huidige afstand en index van het punt. - Retourneer na de lus
maxIndexals de index van het verst gelegen punt.
Oplossing
Bedankt voor je feedback!
single
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
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?
Geweldig!
Completion tarief verbeterd naar 4.35
Anonieme Struct en Union
Veeg om het menu te tonen
De programmeertaal C beschikt over anonieme structuren en unies, waarmee het mogelijk is om structuren en unies te definiëren zonder een naam op te geven.
Wat zijn anonieme structuren en unies?
Een anonieme unie of anonieme structuur heeft geen identificatie. Hierdoor kunnen er geen op zichzelf staande variabelen van dat type worden aangemaakt; ze worden doorgaans gebruikt binnen andere structuren.
// Anonymous union
union {
char x;
int y;
};
// Anonymous structure
struct {
char x;
int y;
};
Anonieme structs en unions zijn bijzonder nuttig wanneer ze genest zijn en alleen gebruikt worden in de context waarin ze gedeclareerd zijn.
Praktisch voorbeeld
Stel je een situatie voor waarin je een ASCII-tabel wilt weergeven waarbij dezelfde waarde zowel als numerieke code als als karakter symbool geïnterpreteerd kan worden. Door een anonieme union binnen een structuur te gebruiken, kun je efficiënt tussen deze twee interpretaties schakelen.
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; }
In dit voorbeeld bevat de structuur ASCIItable een anonieme unie. De unie maakt het mogelijk om hetzelfde geheugen te interpreteren als een numerieke waarde (num) of als een teken (symbol).
Wanneer AZtable.num wordt ingesteld op 65, komt dit overeen met de ASCII-code voor 'A'. Met hetzelfde geheugen vertegenwoordigt AZtable.symbol ook 'A'. Door 26 keer te itereren, kunnen alle hoofdletters samen met hun ASCII-codes worden weergegeven, waarmee wordt aangetoond hoe hetzelfde geheugen meerdere weergaven van de gegevens kan vertegenwoordigen.
Swipe to start coding
Maak een functie findFurthestPoint die het punt vindt dat het verst van de oorsprong (0,0) ligt in een 2D-vlak. Elk punt wordt weergegeven door een structuur Point die een anonieme geneste structuur bevat met de velden x en y.
De functie moet de Euclidische afstand voor elk punt berekenen met de formule:
distance = sqrt(x*x + y*y)
en retourneert de index van het punt met de grootste afstand.
- Bereken binnen de functie de afstand van het eerste punt tot de oorsprong met de formule.
- Initialiseer
maxIndexop0. - Gebruik een
for-lus vani = 1toti = nom door de punten te itereren. - Bereken voor elk punt de afstand met bovenstaande formule.
- Als de afstand groter is dan
maxDistance, werk danmaxDistanceenmaxIndexbij naar de huidige afstand en index van het punt. - Retourneer na de lus
maxIndexals de index van het verst gelegen punt.
Oplossing
Bedankt voor je feedback!
single