Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Anonyme Struktur und Union | Erweiterte Struct-Verwendung
C-Strukturen Meistern

bookAnonyme Struktur und Union

Die Programmiersprache C verfügt über anonyme Strukturen und anonyme Vereinigungen (Unions), die es ermöglichen, Strukturen und Unions ohne Angabe eines Namens zu definieren.

Was sind anonyme Strukturen und Unions?

Eine anonyme Union oder anonyme Struktur besitzt keinen Bezeichner. Daher können keine eigenständigen Variablen dieses Typs erstellt werden; stattdessen werden sie typischerweise innerhalb anderer Strukturen verwendet.

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

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

Anonyme Strukturen und Vereinigungen sind besonders nützlich, wenn sie verschachtelt sind und nur im Kontext ihrer Deklaration verwendet werden.

Praktisches Beispiel

Betrachten Sie ein Szenario, in dem eine ASCII-Tabelle dargestellt werden soll, wobei derselbe Wert entweder als numerischer Code oder als Zeichensymbol interpretiert werden kann. Die Verwendung einer anonymen Union innerhalb einer Struktur ermöglicht einen effizienten Wechsel zwischen diesen beiden Interpretationen.

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 diesem Beispiel enthält die Struktur ASCIItable eine anonyme Union. Die Union ermöglicht es, denselben Speicherbereich entweder als numerischen Wert (num) oder als Zeichen (symbol) zu interpretieren.

Wenn AZtable.num auf 65 gesetzt wird, entspricht dies dem ASCII-Code für 'A'. Im selben Speicherbereich repräsentiert AZtable.symbol ebenfalls 'A'. Durch 26-faches Iterieren können alle Großbuchstaben zusammen mit ihren ASCII-Codes ausgegeben werden, was veranschaulicht, wie derselbe Speicherbereich verschiedene Sichten auf die Daten ermöglichen kann.

Aufgabe

Swipe to start coding

Erstellen einer Funktion findFurthestPoint, die den Punkt findet, der am weitesten vom Ursprung (0,0) in einer 2D-Ebene entfernt ist. Jeder Punkt wird durch eine Struktur Point dargestellt, die eine anonyme verschachtelte Struktur mit den Feldern x und y enthält.

Die Funktion soll die euklidische Distanz für jeden Punkt mit folgender Formel berechnen:

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

und den Index des Punktes mit der größten Distanz zurückgeben.

  1. Innerhalb der Funktion die Distanz des ersten Punktes vom Ursprung mit der Formel berechnen.
  2. maxIndex auf 0 initialisieren.
  3. Eine for-Schleife von i = 1 bis i = n verwenden, um die Punkte zu durchlaufen.
  4. Für jeden Punkt die Distanz mit obiger Formel berechnen.
  5. Wenn die Distanz größer als maxDistance ist, maxDistance und maxIndex auf die aktuelle Distanz und den aktuellen Index setzen.
  6. Nach der Schleife maxIndex als Index des am weitesten entfernten Punktes zurückgeben.

Lösung

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 3
single

single

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

close

bookAnonyme Struktur und Union

Swipe um das Menü anzuzeigen

Die Programmiersprache C verfügt über anonyme Strukturen und anonyme Vereinigungen (Unions), die es ermöglichen, Strukturen und Unions ohne Angabe eines Namens zu definieren.

Was sind anonyme Strukturen und Unions?

Eine anonyme Union oder anonyme Struktur besitzt keinen Bezeichner. Daher können keine eigenständigen Variablen dieses Typs erstellt werden; stattdessen werden sie typischerweise innerhalb anderer Strukturen verwendet.

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

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

Anonyme Strukturen und Vereinigungen sind besonders nützlich, wenn sie verschachtelt sind und nur im Kontext ihrer Deklaration verwendet werden.

Praktisches Beispiel

Betrachten Sie ein Szenario, in dem eine ASCII-Tabelle dargestellt werden soll, wobei derselbe Wert entweder als numerischer Code oder als Zeichensymbol interpretiert werden kann. Die Verwendung einer anonymen Union innerhalb einer Struktur ermöglicht einen effizienten Wechsel zwischen diesen beiden Interpretationen.

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 diesem Beispiel enthält die Struktur ASCIItable eine anonyme Union. Die Union ermöglicht es, denselben Speicherbereich entweder als numerischen Wert (num) oder als Zeichen (symbol) zu interpretieren.

Wenn AZtable.num auf 65 gesetzt wird, entspricht dies dem ASCII-Code für 'A'. Im selben Speicherbereich repräsentiert AZtable.symbol ebenfalls 'A'. Durch 26-faches Iterieren können alle Großbuchstaben zusammen mit ihren ASCII-Codes ausgegeben werden, was veranschaulicht, wie derselbe Speicherbereich verschiedene Sichten auf die Daten ermöglichen kann.

Aufgabe

Swipe to start coding

Erstellen einer Funktion findFurthestPoint, die den Punkt findet, der am weitesten vom Ursprung (0,0) in einer 2D-Ebene entfernt ist. Jeder Punkt wird durch eine Struktur Point dargestellt, die eine anonyme verschachtelte Struktur mit den Feldern x und y enthält.

Die Funktion soll die euklidische Distanz für jeden Punkt mit folgender Formel berechnen:

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

und den Index des Punktes mit der größten Distanz zurückgeben.

  1. Innerhalb der Funktion die Distanz des ersten Punktes vom Ursprung mit der Formel berechnen.
  2. maxIndex auf 0 initialisieren.
  3. Eine for-Schleife von i = 1 bis i = n verwenden, um die Punkte zu durchlaufen.
  4. Für jeden Punkt die Distanz mit obiger Formel berechnen.
  5. Wenn die Distanz größer als maxDistance ist, maxDistance und maxIndex auf die aktuelle Distanz und den aktuellen Index setzen.
  6. Nach der Schleife maxIndex als Index des am weitesten entfernten Punktes zurückgeben.

Lösung

Switch to desktopWechseln Sie zum Desktop, um in der realen Welt zu übenFahren Sie dort fort, wo Sie sind, indem Sie eine der folgenden Optionen verwenden
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 3
single

single

some-alt