Hallo und willkommen zurück. Wir haben eine weitere Herausforderung für Sie.
Bei dieser Herausforderung möchte ich, dass Sie alles über Zeigerarithmetik lernen.
Denken Sie daran, Zeigerarithmetik ist ein wirklich ordentliches Konzept.
Es ist ein Notationskonzept.
Aber es zeigt wirklich, wie Arrays
mit Zeigern zusammenhängen. Sie können ein Array sehr einfach
mit einer sehr einfachen Syntax durchlaufen, die Ihre Codezeile reduziert und ein
wirklich ordentliches Konzept darstellt.
Sie werden also alles über Zeigerarithmetik lernen.
Wir werden auch mehr über den Konstantenmodifikator erfahren.
In dieser Herausforderung möchte ich, dass Sie ein
Programm schreiben, das Ihr Verständnis der Zeigerarithmetik und des Konstantenmodifikators testet.
Wir haben beide Konzepte in früheren Vorlesungen kennengelernt.
Ich möchte, dass Sie eine Funktion schreiben, die die Länge der Zeichenfolge berechnet.
Die Anforderungen sind, dass die Funktion als Parameter konstante Zeichenzeiger nehmen sollte.
Ein konstanter Zeichenzeiger bedeutet, dass Sie den Wert dessen, auf den der Zeiger zeigt,
nicht ändern können, und Sie werden
dies nicht mit der Länge tun.
Die Funktion kann die Länge der Zeichenfolge nur mithilfe der Zeigerarithmetik bestimmen.
Ich möchte nicht, dass Sie die Funktion str length verwenden. Ich möchte, dass Sie Zeigerarithmetik verwenden.
Ich stelle mir vor, dass diese Funktion
implementiert wird, indem Sie die Adresse des Zeigerendes abrufen.
Das wäre im Wesentlichen die Länge des Zeigers.
Aber die Art und Weise, wie Sie die Adresse der letzten Zeichenfolge und den Zeiger erhalten können, ist, dass
Sie eine while-Schleife schreiben können.
Die while-Schleife kann bis zum Null-Abschlusszeichen reichen.
Oder das Null-Abschlusszeichen, denken Sie daran, das
als int dargestellt wird.
Der Nullterminator ist also tatsächlich eine Null. Sie könnten also eine
while-Schleife schreiben, und die gesamte while-Schleife, die in ihrem Zustand
enthalten sein muss, dereferenziert den Zeiger.
Denn wenn der Wert des d-Referenzzeigers Null ist, springen Sie aus der Schleife
heraus und das wäre der Nullterminator.
Ich möchte, dass Sie den gesamten
Zeiger durchgehen.
Und während Sie es
durchlaufen, erhöhen Sie diesen Zeiger weiter.
Jetzt haben Sie einen Zeiger, der auf das Ende der Zeichenfolge zeigt.
Um die Länge tatsächlich zu berechnen, müssen Sie
lediglich minus zwei Zeiger verwenden.
Der übergebene Zeiger, der der Anfang der Zeichenfolge ist,
und dann der Zeiger, den
Sie in der Funktion erstellt haben, die auf das Ende der Zeichenfolge zeigt.
Wenn Sie das Ende des Zeichenfolgenzeigers vom Anfang des
Zeichenfolgenpunkts abziehen, haben Sie die Länge der Zeichenfolge.
Sie führen also eine Zeigerarithmetik durch, indem
Sie den Zeiger nacheinander inkrementieren, um zur Endadresse zu gelangen, und
dann die Punktarithmetik verwenden, um jeden Zeiger zu subtrahieren.
Dies ist wahrscheinlich die gültigste Methode, um Punktarithmetik für
die Subtraktion zu verwenden. Normalerweise fügen Sie keine zwei Zeiger
hinzu, weil Sie zwei Adressen hinzufügen sollten.
Sie können zwei Adressen subtrahieren, um zu ermitteln, wie weit zwei Elemente in
einem Array entfernt sind. Dies
wäre sinnvoll, das Hinzufügen jedoch nicht. Um es noch einmal zu wiederholen, kann
die Funktion die Länge der Zeichenfolge nur mithilfe der Punktarithmetik bestimmen.
Erstellen Sie einen lokalen Zeiger in
Ihrer Funktion, und erhöhen Sie diesen Zeiger jedes Mal, um zum Ende
zu gelangen, bis Sie den Nullterminator sehen, eine einfache while-Schleife.
Und wenn Sie die Endadresse haben, haben Sie bereits die
Anfangsadresse. Subtrahieren Sie die beiden Zeiger, die Ihnen die Länge geben.
Sie sollten diese Länge als int von der Funktion zurückgeben.
Und dann können Sie einfach die tatsächliche Länge selbst ausdrucken.
Diese Zuweisung macht Sie mit der Punktarithmetik und der Verwendung
des Konstantenmodifikators vertraut, da Sie den tatsächlichen Wert, auf den er zeigt,
nicht ändern und auch zwei Zeiger
subtrahieren möchten. Außerdem verwenden Sie eine while-Schleife, die Sie anzeigen
können Der Wert des Zeigers selbst, um das
Nullzeichen zu bestimmen. Viel Glück.
Ich werde in der nächsten Vorlesung eine Lösung anbieten. Vielen Dank.