Lecture 4: Datenstrukturen Flashcards

(12 cards)

1
Q

Was versteht man in C unter einem „(Speicher-)Objekt“?

A

Ein Objekt ist jede Variable, jeder Funktionsparameter oder jede Funktion, die im Speicher Platz belegt; sein Typ wird als „Objekttyp“ bezeichnet.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Wofür benutzt man den sizeof-Operator?

A

Er liefert die Größe eines Datentyps / Objekts in Bytes; sizeof(char) ist stets 1, alle anderen Typgrößen sind plattformabhängig.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Was bedeutet „Alignment“ in C und wie ermittelt man es?

A

Alignment bestimmt zulässige Adressen eines Typs (Adresse mod Alignment = 0). Das Schlüsselwort alignof gibt das Alignment eines Typs zurück.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Welche zwei Hauptaktionen kann man mit Zeigern (Pointer) durchführen?

A

Dereferenzieren (*ptr) für den Zugriff auf das Objekt, 2) Pointer-Arithmetik (z. B. ptr += 2) zur positionsbezogenen Verschiebung in Arrays. ​

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Warum liefert sizeof(arr) im Funktionsparameter int arr[] nicht die Array-Größe?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Wie wird ein String in C dargestellt?

A

Als char-Array, das mit einem NULL-Byte (‘\0’) terminiert wird; String-Literale wie “Hello” sind syntaktischer Zucker für solch ein Array. ​

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Gibt man die Länge eines char-Arrays immer explizit an?

A

Nein. Bei direkter Initialisierung mit einem String-Literal ist die Längenangabe optional, da der Compiler sie inklusive dem terminierenden ‘\0’ ableitet.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Wie definiert und verwendet man eine struct in C?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Worin unterscheidet sich eine union von einer struct?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Wie ist ein zweidimensionales Array im Speicher angeordnet und wie greift man darauf zu?

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Welche Vorteile bietet zusammenhängender Speicher bei Arrays?

A

Einfache Iteration und effiziente Pointer-Arithmetik, da alle Elemente dicht beieinander liegen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Was demonstriert das Beispiel ptr += 2; bei einem int array[]?

A

Die Pointer-Arithmetik verschiebt den Zeiger um zwei Array-Elemente (nicht Bytes) und ermöglicht so schnellen Indexzugriff ohne separate Zählvariable.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly