#32 Datenstrukturen Flashcards
Was ist das Ziel von Strukturen? Nenne auch die Syntax.
Ziel: Zusammenfassung der Attribute mit unterschiedlichem Datentypen in
einem neuen Datentyp.
Beispiel: ein Kunde wird durch Namen und Adresse sowie Kundennummer
definiert.
Syntax:
struct [Typname] {
Komponente1;
[Komponente2; …]
} [VarName1, …];
Was sind die zulässigen Operationen für Strukturen?
- Übergabe an Funktionen als Parameter (call by value!)
- Rückgabe einer Struktur aus einer Funktion
- Zuweisungsoperator für gesamte Struktur (Kopie wird erzeugt)
- Adress- und sizeof-Operator
- Elementzugriffsoperator: Punkt (.)
Wie werden die Attribute einer Struktur bei der Deklaration gesetzt?
Direkte Zuweisung von Attributen: Die Attribute einer Struktur können direkt bei der Deklaration gesetzt werden.
Beispiel:
struct Spieler {
char name[50];
int alter;
long punktzahl;
};
struct Spieler bob = {“Bob”, 12, 20000};
Welcher Operator erlaubt den Zugriff auf Inhalte von Strukturen über Zeiger?
Operator: ->
Beispiel:
typedef struct s_kunde {
char name[64];
int alter;
} kunde;
kunde k1;
kunde *zeiger = &k1;
Normalerweise: (*zeiger).alter = 20;
Besser: zeiger->alter = 20;
Was sind die Eigenschaften von Bitfeldern?
- Bitfelder dienen zur Verringerung des Speicherbedarfs und leichteren Zugriff auf einzelne Bits.
- Die Syntax ist analog zu struct, hinter jedes Element wird die Anzahl der
benötigten Bits geschrieben.
Beispiel für Bitfeld (1 Byte groß):
struct zeichen {
unsigned char data:7;
unsigned char parity:1;
};
Achtung: Das Bitfeld belegt mindestens so viel Speicher wie der größte
enthaltene Datentyp.
Was sind die Eigenschaften von Unions?
- Syntax analog zu Strukturen, Schlüsselwort union statt struct
- Es wird jedoch nur einer der Werte gespeichert.
- Speicherbedarf der Union richtet sich nach dem größten Element.
- Beispiel:
union typen {
int i;
double d;
} u;
u.i = 5;
u.d = 2.3;
(u.i ist nun undefiniert)
Wofür werden Unions genutzt?
- Einsparen von Speicherplatz: wenn sichergestellt ist, dass manche
Informationen nicht gleichzeitig gespeichert werden müssen. - Maschinennahe Manipulation: Interpretation eines Speicherbereichs durch
verschiedene Datentypen (z.B. um auf Gleitkommazahlen auch
Bitmanipulationen durchführen zu können).
Achtung: Solche Programme sind i.d.R. nicht portierbar! - Bessere Lesbarkeit
Nenne Schlüsselpunkte zum Speicherlayout von: Arrays, Strukturen, Bitfelder und Unions
Arrays:
- speichern eine geordnete Sammlung von Werten des selben
Datentyps.
- Das Speicherlayout von Arrays ist einfach und effizient, da die Elemente des Arrays direkt hintereinander(sequenziell) im Speicher platziert werden.
Strukturen:
- fassen Attribute zu neuem Datentyp zusammen.
- Die Speicherzuweisung für Strukturen erfolgt normalerweise sequenziell, d.h. die Mitgliedsvariablen werden nacheinander im Speicher platziert.
Bitfelder:
- sind Strukturen mit eingegrenztem Speicherbedarf.
- definiert eine Struktur, in der die Mitgliedsvariablen explizit als Bitfelder deklariert werden, und jeder Variablen wird eine bestimmte Anzahl von Bits zugewiesen.
Unions:
- teilen sich Attribute einen Speicherbereich.
- Im Gegensatz zu Strukturen teilen Unions alle ihre Mitglieder denselben Speicherplatz.