Hallo und willkommen zurück.
In dieser Vorlesung möchte ich über den const-Modifikator sprechen und wie
wir ihn mit Zeigern verwenden.
Wir haben über ständige Vorlesungen gelernt.
Es bedeutet nur, dass Sie den Wert einer Variablen nicht ändern können. Aber was bedeutet es, wenn wir es auf einen Zeiger anwenden?
Wenn wir also den const-Modifikator in einer Variablen oder einem Array
verwenden, teilt er dem Compiler mit, dass der Inhalt des variablen Arrays vom Programm nicht geändert wird.
Die Alternative bestand darin, definierte Anweisungen vom Präprozessor zu
erstellen, aber const ist normalerweise effizienter und besser.
Bei Zeigern müssen wir zwei Dinge berücksichtigen, wenn wir einen const-Modifikator verwenden.
Wollen wir eigentlich sagen, dass der Zeiger nicht geändert werden kann?
Oder sagen wir, dass der Wert, auf den der Zeiger zeigt, nicht geändert werden kann?
Denn denken Sie daran, ein Zeiger enthält den Wert einer Adresse.
Und wir möchten diese Adresse möglicherweise nie ändern.
Oder wir möchten den Wert, auf den der Punkt zeigt, nicht ändern.
In jedem Fall müssen wir in unserer Syntax spezifisch sein.
Sie können also das Schlüsselwort const verwenden, wenn Sie einen Zeiger deklarieren, um anzugeben, dass der Wert, auf den
verwiesen wird, nicht geändert werden darf.
Die Art und Weise, wie Sie dies und wieder so
angeben, dass der Zeiger ein Wert ist, da ein Wert eine Adresse hat.
Worauf es hinweist, ist der Wert dieser Adresse.
Wenn Sie möchten, dass sich das nicht ändert, würden
Sie so etwas tun.
Sie würden sagen, wenn Sie den Zeiger deklarieren, würden Sie das Sternchen
in den Konstanten-Modifikator vor dem Typ setzen.
Sie würden also unabhängig vom Typ Ihres Zeigers als Sternchenzeiger konstant sagen.
Dies ist also tatsächlich deformiert und definiert einen Zeiger
auf eine Konstante.
Wir werden 999l nicht ändern können.
Wir erklären also, dass der Wert, auf den der p-Wert zeigt, konstant ist.
Der Compiler sucht nach Anweisungen, die versuchen, den Wert zu ändern, auf den der p-Wert zeigt.
Und wenn es einen Kumpel im Programm gibt, wird es einen Fehler auslösen.
Das ist also die Syntax. Auch hier möchten Sie
feststellen, dass die Konstante das erste Wort
ist und vor dem Typ steht. Das heißt also, dass sich der Wert, auf den gezeigt
wird, nicht ändern kann.
Wenn Sie also versuchen, auf pvalue so etwas zu tun, weisen Sie
dem Wert, auf den verwiesen wird, einen Wert zu, da
dort der Indirektionsoperator angezeigt wird. Das heißt, wir weisen dem, auf
das wir zeigen, einen Wert zu. Wenn wir das versuchen,
wird es einen Fehler geben, weil wir diesen Wert
nicht ändern können, 999l nicht in 888l ändern können.
Was ist nun mit Zeigern auf Konstanten?
In der vorherigen Deklaration haben wir den
Zeiger erstellt, auf den der Punkt zeigt, der sich nicht ändern kann.
Wir können jedoch den tatsächlichen Wert der von uns deklarierten Variablen ändern.
Wir könnten also immer noch den langen Wert ändern.
Wir können den p-Wert des Sterns nicht ändern.
Der lange Wert wird jedoch nicht als Konstante definiert, sondern nur als langer Wert.
Daher können wir den Wert-Ganzzahlzeiger weiterhin ändern,
da keine Konstante angewendet wurde.
Wir haben nur Konstanten auf den Zeiger angewendet. Wir können also sagen, dass der Wert gleich 777l ist.
Der Wert, auf den verwiesen wird, hat sich geändert, aber Sie haben den Zeiger nicht verwendet, um die Änderung vorzunehmen.
Der Zeiger selbst ist ebenfalls keine Konstante.
Der Zeiger merken enthält eine Adresse.
Wir haben den Zeiger nicht als Konstante deklariert. Das können wir also auch
Wir, auf die der Zeiger zeigt, sind konstant. noch ändern. Wenn wir eine neue Variable namens number deklariert haben, können wir
sagen, dass der p-Wert der Adresse dieser Nummer entspricht.
Das ist vollkommen in Ordnung, da wir die Adresse des Zeigerwerts ändern.
Wir ändern nicht den Wert dessen, auf den der Zeiger zeigte.
Verstehen Sie diese Unterscheidung, indem Sie entweder den Wert
des Zeigers ändern, der
nur eine Adresse ist, oder ändern, auf was der Zeiger zeigt.
Wenn Sie nicht ändern möchten, auf was
der Zeiger zeigt, muss const das erste Schlüsselwort in der Deklaration des Zeigers selbst sein.
In diesem Beispiel ändern wir also die in p-value gespeicherte Adresse so, dass sie auf eine Zahl zeigt.
Wir können den Zeiger immer noch nicht verwenden, um den gespeicherten Wert zu ändern, da dies
deklariert wurde, da wir diesen Wert nicht ändern können.
Sie können die im Zeiger gespeicherte Adresse beliebig ändern, genau wie wir.
Die Verwendung des Zeigers zum Ändern des Werts, auf den verwiesen wird,
ist auch nach dem Ändern der im Zeiger gespeicherten Adresse nicht zulässig.
Obwohl wir es gerade in eine lange
Zahl geändert haben, hatte der Zeiger immer noch eine Konstante als Schlüsselwort.
Wir können den Wert also nicht ändern, egal auf was der Zeiger zeigt.
Wie wäre es, wenn Sie nicht zulassen, dass sich die Adresse
des Zeigers ändert, der Wert, der sich im Zeiger befindet?
Daher möchten Sie möglicherweise auch sicherstellen, dass die im Zeiger gespeicherte Adresse nicht geändert werden kann.
Sie können dies tun, indem Sie das Schlüsselwort const in der
Deklaration des Zeigers auf dieselbe Weise verwenden, es unterscheidet sich jedoch geringfügig.
Anstatt const als erstes Schlüsselwort zu verwenden,
setzen Sie es nach dem Datentyp und nach dem Sternchen.
Dies bedeutet, dass der Zeiger selbst seinen Wert nicht ändern kann.
Wenn Sie es vor das int setzen, sagen Sie, dass sich der Wert, auf den der Zeiger zeigt, nicht ändern kann.
Wenn Sie dies tun, wird sichergestellt, dass der Zeiger immer auf dasselbe zeigt.
Die Adresse wird sich nie ändern.
Der Compiler überprüft, ob Sie den
Versuch, den Zeiger an einer anderen Stelle in Ihrem Code zu ändern, nicht invertieren.
Sie können diese Adresse nicht ändern.
Wenn Sie also versuchen würden, p count gleich und item zu sagen, würden Sie eine Fehlermeldung erhalten.
Denn das kann immer nur auf die Zähladresse verweisen.
Es geht darum, wo Sie das konstante Schlüsselwort platzieren, wenn Sie es ändern möchten.
Wenn Sie nicht möchten, dass sich der Zeiger auf den Zeiger ändert, oder wenn
Sie nicht zulassen, dass sich die Adresse des Zeigers ändert.
Konstante als erstes Schlüsselwort erlaubt nicht, dass der Wert der Zeiger, auf die verwiesen wird, geändert wird.
Wenn Sie die Konstante nach dem Datentyp in den Stern einfügen, bedeutet dies,
dass sich die Zeigeradresse nicht ändern kann.
Das ist eine Menge zu nehmen und das ist sehr verwirrend. Studieren Sie also, was ich gerade gesagt habe.
Verstehe diese Syntax, sie ist sehr wichtig
und sehr knifflig. Es kann sehr leicht sein, diesen
Fehler zu machen. Verstehe also den Unterschied.
Sie können den Wert,
auf den p count zeigt, weiterhin in p count ändern, genau wie im vorherigen. Da p count ist, können wir, obwohl wir
keine neue Adresse zuweisen, den
Wert ändern, auf den gezeigt wird.
So können wir es de-referenzieren und auf diese Weise ändern. Wir können sagen, dass die Anzahl der Sterne p gleich 345 ist, das ist in Ordnung.
Verweist über den Zeiger auf den in count gespeicherten Wert und ändert den Wert in 345.
Sie können einen konstanten Zeiger erstellen, der auf einen Wert zeigt, der auch
eine Konstante ist. Sie können also so etwas tun, Konstante in
Stern, Konstante p Element.
Und das heißt, was der Wert zeigt, ist
konstant und der Zeiger selbst ist eine Konstante.
P item ist also ein konstanter Zeiger auf eine Konstante, sodass alles fest ist.
Sie können die in p item gespeicherte Adresse nicht ändern und mit
p item nicht ändern, auf was sie verweist.
Sie können den Artikel jedoch trotzdem ändern.
Artikel ist keine Konstante, daher können Sie Artikel ändern.
Sie können den Wert direkt ändern.
Wenn Sie sicherstellen möchten, dass nichts geändert wurde, müssen
Sie auch die Variable item int als Konstante erstellen.
Und dann würde das bedeuten, dass es sich nie ändern wird.
Denken Sie jedoch an den Unterschied
zwischen konstanten Zeigern und konstanten Werten, auf die der Zeiger zeigt.
Sie können beide verwenden. Sie können das eine oder andere verwenden.
Wenn Sie sicherstellen möchten, dass
alles konstant ist, stellen Sie sicher, dass das, was Sie auf diese Variable zeigen, auch konstant ist. Vielen Dank.