Lecture 4: Datenstrukturen Flashcards
(12 cards)
Was versteht man in C unter einem „(Speicher-)Objekt“?
Ein Objekt ist jede Variable, jeder Funktionsparameter oder jede Funktion, die im Speicher Platz belegt; sein Typ wird als „Objekttyp“ bezeichnet.
Wofür benutzt man den sizeof-Operator?
Er liefert die Größe eines Datentyps / Objekts in Bytes; sizeof(char) ist stets 1, alle anderen Typgrößen sind plattformabhängig.
Was bedeutet „Alignment“ in C und wie ermittelt man es?
Alignment bestimmt zulässige Adressen eines Typs (Adresse mod Alignment = 0). Das Schlüsselwort alignof gibt das Alignment eines Typs zurück.
Welche zwei Hauptaktionen kann man mit Zeigern (Pointer) durchführen?
Dereferenzieren (*ptr) für den Zugriff auf das Objekt, 2) Pointer-Arithmetik (z. B. ptr += 2) zur positionsbezogenen Verschiebung in Arrays.
Warum liefert sizeof(arr) im Funktionsparameter int arr[] nicht die Array-Größe?
Innerhalb der Funktion wird der Array-Parameter zu einem Zeiger decayt; sizeof(arr) misst daher nur die Größe des Zeigers, nicht die des ursprünglichen
Wie wird ein String in C dargestellt?
Als char-Array, das mit einem NULL-Byte (‘\0’) terminiert wird; String-Literale wie “Hello” sind syntaktischer Zucker für solch ein Array.
Gibt man die Länge eines char-Arrays immer explizit an?
Nein. Bei direkter Initialisierung mit einem String-Literal ist die Längenangabe optional, da der Compiler sie inklusive dem terminierenden ‘\0’ ableitet.
Wie definiert und verwendet man eine struct in C?
struct Person { char name[20]; int alter; float gehalt; };
struct Person p = {“Max”, 30, 50000.0};
p.alter = 40; // Feldzugriff
struct Person *pp = &p; // Zeiger auf Struct
int a = pp->alter; // Zugriff über Zeiger
Worin unterscheidet sich eine union
von einer struct
?
Bei einer union
teilen sich alle Mitglieder denselben Speicherbereich; das Schreiben in ein Feld überschreibt die anderen. Bei einer struct
erhält jedes Feld eigenen Speicher.
Wie ist ein zweidimensionales Array im Speicher angeordnet und wie greift man darauf zu?
Es liegt zeilenweise (row-major) zusammenhängend im Speicher. Zugriff z. B. matrix[1][2]
greift auf das Element der zweiten Zeile, dritten Spalte zu.
Welche Vorteile bietet zusammenhängender Speicher bei Arrays?
Einfache Iteration und effiziente Pointer-Arithmetik, da alle Elemente dicht beieinander liegen.
Was demonstriert das Beispiel ptr += 2;
bei einem int array[]
?
Die Pointer-Arithmetik verschiebt den Zeiger um zwei Array-Elemente (nicht Bytes) und ermöglicht so schnellen Indexzugriff ohne separate Zählvariable.