Anonyme 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
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.
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.
- Innerhalb der Funktion die Distanz des ersten Punktes vom Ursprung mit der Formel berechnen.
maxIndexauf0initialisieren.- Eine
for-Schleife voni = 1bisi = nverwenden, um die Punkte zu durchlaufen. - Für jeden Punkt die Distanz mit obiger Formel berechnen.
- Wenn die Distanz größer als
maxDistanceist,maxDistanceundmaxIndexauf die aktuelle Distanz und den aktuellen Index setzen. - Nach der Schleife
maxIndexals Index des am weitesten entfernten Punktes zurückgeben.
Lösung
Danke für Ihr Feedback!
single
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Großartig!
Completion Rate verbessert auf 4.35
Anonyme 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
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.
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.
- Innerhalb der Funktion die Distanz des ersten Punktes vom Ursprung mit der Formel berechnen.
maxIndexauf0initialisieren.- Eine
for-Schleife voni = 1bisi = nverwenden, um die Punkte zu durchlaufen. - Für jeden Punkt die Distanz mit obiger Formel berechnen.
- Wenn die Distanz größer als
maxDistanceist,maxDistanceundmaxIndexauf die aktuelle Distanz und den aktuellen Index setzen. - Nach der Schleife
maxIndexals Index des am weitesten entfernten Punktes zurückgeben.
Lösung
Danke für Ihr Feedback!
single