Dreißig Übungen zu Speicher und Adressen — von Bytes und Hex-Adressen bis zum Adressoperator und zu sizeof.
Dein Fortschritt:
0 / 0 Aufgaben
1
Übungsaufgaben
Dreißig Übungen in gemischter Reihenfolge — du klickst, ziehst, ordnest, rechnest und knobelst. Jede Übung gibt dir sofort eine Rückmeldung, und zu jeder Aufgabe gibt es zwei gestufte Tipps: Der erste zeigt die Richtung, der zweite den entscheidenden Schritt. Die Chips zeigen das Anforderungsniveau: AFB I heißt wiedergeben und direkt anwenden, AFB II selbst entscheiden und verknüpfen, AFB III begründen, beurteilen oder eine Falle durchschauen. Aufgaben mit dem Chip Mix verbinden Wissen aus früheren Unterkapiteln, bei Trick steckt eine Falle drin. Fährst du über ein unterstrichenes Arbeitswort, siehst du, was es genau von dir verlangt.
A1
Je …, desto …
AFB II
Erläutere die Zusammenhänge rund um Speicher und Adressen, indem du jeden Satz durch Klicken auf die farbigen Wörter richtig einstellst.
Klicke auf die farbig hinterlegten Wörter: Jeder Klick schaltet zur nächsten Möglichkeit weiter. Stelle jeden Satz so ein, dass er stimmt. Tastatur: Tab zum Wort, Enter/Leertaste oder ↑/↓ schaltet um.
1
Je der Abstand zweier Adressen, desto Bytes liegen dazwischen.
2
Ein double belegt so viele Byte wie ein int.
3
Die Adresse einer Variablen ist die Adresse ihres Bytes.
4
Bei jedem Start des Programms liefert &x Adressen.
Der Abstand zählt die Bytes dazwischen. Ein double hat 8 Byte, ein int 4 Byte. Eine Variable wird über ihr erstes Byte adressiert, und das Betriebssystem verteilt den Speicher bei jedem Start neu.
Ansatz: Setze kleine Zahlen ein: Zwei Adressen mit Abstand 2 gegen zwei mit Abstand 10.
Weiter: Beim Satz mit zwei Stellen gibt es zwei richtige Einstellungen — beide Hälften müssen zueinander passen.
A2
Zwei Adressen in einem Programm
AFB IIMix
Deute die Ausgaben des Programms und markiere alle zutreffenden Aussagen.
C · zeige.c (Ausschnitt)
void zeige(int p) {
printf("%p\n", &p);
}
intmain(void) {
int a = 5;
printf("%p\n", &a);
zeige(a);
return0;
}
Mehrere Antworten sind richtig. Markiere alle zutreffenden und klicke dann auf „Prüfen“.
Beim Aufruf wird der Wert von a in den Parameter p kopiert; p ist eine eigene Variable an einer eigenen Adresse. Deshalb kann zeige a nicht verändern. Und weil das Betriebssystem den Speicher bei jedem Start anders verteilt, ändern sich auch die Adressen.
Ansatz: Frage dich: Wird beim Aufruf der Wert oder die Variable selbst übergeben?
Weiter: Zwei verschiedene Variablen können nie an derselben Adresse liegen.
A3
Byte-Reihe beschriften
AFB I
Zeichne in die Byte-Reihe ein, was an den nummerierten Stellen zu sehen ist: Lege die passenden Etiketten auf die Markierungen.
Ziehe jedes passende Etikett auf seine Markierung — oder klicke erst das Etikett und dann die Markierung. Tastatur: Etikett mit Enter wählen, dann die Ziffer der Markierung drücken; 0 legt es zurück. Nicht jedes Etikett wird gebraucht.
Der blaue Block hat vier Zellen: ein int (hier n) belegt 4 Byte, seine Adresse ist die des ersten Bytes. Das orange Feld ist ein einzelnes Byte (char), die grauen Zellen bleiben frei.
Ansatz: Zähle die Zellen eines Blocks ab: Wie viele Bytes gehören zusammen?
Weiter: Die Adresse einer Variablen ist die Adresse ihres ersten Bytes — das ist die linke Kante des Blocks.