Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Anonieme Struct en Union | Geavanceerd Gebruik van Structs
C-Structs Beheersen

bookAnonieme 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

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; }

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.

Taak

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.

  1. Bereken binnen de functie de afstand van het eerste punt tot de oorsprong met de formule.
  2. Initialiseer maxIndex op 0.
  3. Gebruik een for-lus van i = 1 tot i = n om door de punten te itereren.
  4. Bereken voor elk punt de afstand met bovenstaande formule.
  5. Als de afstand groter is dan maxDistance, werk dan maxDistance en maxIndex bij naar de huidige afstand en index van het punt.
  6. Retourneer na de lus maxIndex als de index van het verst gelegen punt.

Oplossing

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 3
single

single

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Suggested prompts:

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?

close

bookAnonieme 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

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; }

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.

Taak

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.

  1. Bereken binnen de functie de afstand van het eerste punt tot de oorsprong met de formule.
  2. Initialiseer maxIndex op 0.
  3. Gebruik een for-lus van i = 1 tot i = n om door de punten te itereren.
  4. Bereken voor elk punt de afstand met bovenstaande formule.
  5. Als de afstand groter is dan maxDistance, werk dan maxDistance en maxIndex bij naar de huidige afstand en index van het punt.
  6. Retourneer na de lus maxIndex als de index van het verst gelegen punt.

Oplossing

Switch to desktopSchakel over naar desktop voor praktijkervaringGa verder vanaf waar je bent met een van de onderstaande opties
Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 3
single

single

some-alt