Dreißig Übungen zu Zeigern — von der Adresse in einer Variablen über das Dereferenzieren bis zu Zeigern als Parametern.
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
Anweisung am Automaten
AFB II
Bestimme die Anweisung, die zum Auftrag passt: Drehe die Walzen für die linke und die rechte Seite der Zuweisung. Es gilt int x, y; int *p, *q;.
Drehe die Walzen, bis die Kombination zum Auftrag passt, und klicke dann auf „Kombination prüfen“. Klick auf ▲/▼ oder auf die obere/untere Hälfte des Fensters dreht. Mit der Tastatur: Tab zur Walze, ↑/↓ drehen, ←/→ Nachbarwalze, Enter prüft.
Links
p*pxq
Rechts
&x7*q&q
Soll ein Zeiger auf eine Variable zeigen, bekommt er ihre Adresse: p = &x. Wer über den Zeiger schreibt, setzt den Stern davor: *p = 7. Und x = *q holt den Wert, auf den q zeigt.
Ansatz: Frage bei jeder Runde: Wird ein Zeiger umgehängt oder eine Variable beschrieben?
Weiter: Auf der Seite, die ein Zeiger sein soll, steht keine Zahl, sondern eine Adresse.
A2
Was sagt gcc dazu?
AFB II
Alle Zeilen stehen in main hinter int x = 1; und int *p = &x;; übersetzt wird mit gcc -Wall. Untersuche jede Zeile und lege sie in den passenden Korb.
Ziehe jede Karte in den passenden Korb — oder wähle sie mit Enter aus und drücke dann die Ziffer des Korbs (0 legt sie zurück).
1läuft fehlerfrei
2gcc warnt: Typen passen nicht
3übersetzt, stürzt aber ab
Bei p = x; und *p = &x; meldet gcc „makes pointer from integer“ bzw. „makes integer from pointer“: Adresse und Zahl werden vermischt. Die NULL-Zeilen übersetzt gcc ohne Meldung — der Fehler zeigt sich erst beim Ausführen als Segmentation fault. Typischer Fehler: zu glauben, der Compiler finde jeden Zeigerfehler.
Ansatz: Prüfe bei jeder Zuweisung: Welcher Typ steht links, welcher rechts? p ist int *, *p und x sind int, &x ist int *.
Weiter: Ob ein Zeiger gerade NULL ist, weiß der Compiler nicht — das stellt sich erst zur Laufzeit heraus.
A3
Welche Ausdrücke liefern 5?
AFB I
Lies an den Feldern ab, welche Ausdrücke den Wert 5 liefern, und markiere genau diese. Es gilt int x = 5; int *p = &x;.
Klicke die passenden Felder an — ein zweiter Klick nimmt die Markierung zurück. Mit der Tastatur: Tab ins Raster, Pfeiltasten wandern, Enter markiert. Vollständige Reihen aus richtigen Feldern ergeben ein Bingo.
Markiere alle Ausdrücke, die den Wert 5 liefern.
x und *p lesen beide den Wert 5, x * 1 ist ebenfalls 5. &x und p sind Adressen, x + 1 und *p + 1 ergeben 6, sizeof(x) ist 4 und NULL zeigt auf nichts.
Ansatz: Frage bei jedem Feld: Ist es eine Adresse oder ein int-Wert?
Weiter: *p ist der Wert an der Stelle, auf die p zeigt — also der Wert von x.