Gerade wenn man Zeiger, Felder und Zeichenketten sich betrachtet, dann werden die Unterschiede
zwischen Zeigern und Feldern und die Darstellung im Speicher ganz besonders deutlich.
Und deswegen beginne ich jetzt diesen Abschnitt mal mit einer anderen Variante der Strilleng-
funktion, die wir uns ja bereits angeschaut hatten, an der ich den Ablauf noch mal in
einzelnen Schritten zeigen möchte.
Also Zeichenketten sind ja Felder von Einzelzeichen, die in der internen Darstellung durch einen
null Charakter abgeschlossen sind.
Und wenn ich jetzt diesen Aufruf habe, Strilleng von x, dann wäre eine mögliche Implementierung
dieser Funktion.
Die Funktion hat als Parameter einen Charakterpointer.
Sie bekommt also irgendeine Zeichenkette übergeben, zum Beispiel die Zeichenkette Hallo, die durch
einen null Charakter abgeschlossen ist.
Dann würde dieses S, dieser Charakterpointer, am Anfang dieses Funktionsaufrufs ja hier
auf das H zeigen.
Wenn wir die Implementierung jetzt anschauen, Schritt für Schritt, vor n gleich Null.
Das N benutze ich, um die Zeichen zu zählen.
Dann könnte ich alternativ zu der Implementierung, die wir ein paar Seiten vorher gesehen haben,
auch so implementieren, dass ich sage, weil Stern S ungleich null Charakter, S++.
Das heißt, ich mache eine Pointer-Arithmetik, ich zähle den Zeiger 1 weiter, sodass er
eben ein Zeichen weiter zählt.
Und in jedem Schleifendurchlauf erhöhe ich auch das N um 1.
Jetzt zeigt also der Zeiger S auf das A und N hat den Wert 1.
Beim nächsten Durchlauf auch wieder S++ und N++, dann zeigt das S auf das L und N ist 2.
Noch ein Durchlauf, dann zeigt das S auf das zweite L, N ist 3.
Noch ein Durchlauf.
S zeigt auf das O, N ist 4.
Und noch ein Durchlauf.
Und N ist jetzt 5.
Und S zeigt jetzt auf den null Charakter.
Also Stern S ist gleich null.
Das heißt also, die Abbruchbedingung hier ist erfüllt, die Schleife bricht ab und wir
machen ein Return von 5.
Eine andere Version, die ich jetzt nicht Schritt für Schritt durchgehe, benutzt eine andere
Art der Pointer-Arithmetik, ist jetzt sicherlich ein bisschen unübersichtlicher, aber auch
letztendlich eine Möglichkeit, wie man das programmieren könnte.
Wir haben auch wieder diesen Pointer S, der zeigt am Anfang auf das H.
Hierher.
Und dann haben wir einen zweiten Pointer P, der zeigt am Anfang ebenfalls auf das H.
Und jetzt mache ich eine Schleife, weil Stern P ungleich null.
Also Stern P ist jetzt zu diesem Zeitpunkt das H.
Ist also nicht null, also mache ich P++, P zeigt auf das A.
Ist nicht null, P++, L, P++, P++.
So und schließlich hier P++, P zeigt auf den Rückrechter, damit bricht die Schleife ab.
Und jetzt kommt hier eine sehr interessante Operation am Ende, nämlich Return von P-S.
Ich ziehe also den einen Pointer von einem anderen Pointer ab.
Und wenn ich zwei Pointer voneinander substrahiere, dann ist das Ergebnis die Zahl der Elemente,
die dazwischen steht.
Und zwischen dem H und dem null Charakter, ja gut, oder diesen Zweigern, stehen eben
fünf Elemente.
Und auch so kommt an dieser Stelle wieder fünf raus.
Presenters
Zugänglich über
Offener Zugang
Dauer
00:19:19 Min
Aufnahmedatum
2020-05-05
Hochgeladen am
2020-05-05 16:26:44
Sprache
de-DE