Hallo und willkommen zurück.
In dieser Vorlesung möchte ich über das Definieren von Zeigern sprechen, hauptsächlich die
Syntax zum Deklarieren von Reporter und das anschließende Zuweisen einer Speicheradresse zu einem
Zeiger anhand der Adresse des Operators.
Bis zu diesem Punkt sollte uns klar sein,
dass ein Zeiger nichts anderes als eine
Variable ist, die auf eine Speicheradresse zeigt oder eine Speicheradresse als Wert enthält.
Das Deklarieren eines Zeigers ist also nicht dasselbe wie das Erstellen eines normalen Zeigers.
Sie können also so etwas wie einen Zeiger nicht machen.
Auf diese Weise kann kein Zeiger deklariert werden. Die Syntax ist etwas anders.
Sie verwenden ein Sternchen. Es reicht also nicht aus zu sagen, dass eine Variable ein Zeiger ist.
Sie müssen auch die Art der Variablen angeben, auf die der Zeiger zeigt.
Unterschiedliche Variablentypen belegen unterschiedliche Speichermengen.
Einige Zeigeroperationen erfordern die Kenntnis dieser Speichergröße.
Genau wie bei einer regulären Variablen beim Angeben eines
Datentyps müssen Sie beim Erstellen einer Variablen
eines Zeigerdatentyps auch diesen Datentyp angeben.
Sie können einen Zeiger auf eine Variable vom Typ int deklarieren, indem Sie
Folgendes tun: int star oder asterisk p number.
Das wird dir sagen, dass das ein Zeiger ist.
Das int sieht genauso aus, aber danach ist das Sternchen.
Das Sternchen kennzeichnet einen Zeiger, und dann geben Sie den
Typ des Zeigers selbst an. Dies ist ein int-Zeiger.
Der Typ der Variablen mit dem Namen p nummeriert int star.
Es kann die Adresse jeder Variablen vom Typ int speichern.
Ein Zeiger speichert Adressen. Wenn Sie also
die Adresse einer anderen Variablen speichern möchten, muss
diese Variable als ganzzahliger Typ definiert werden.
Hier zeigt PI also auf die
Variable int,
char star pc, das zeigt auf eine Zeichenvariable,
float star pf star pg, das sind Zeiger auf float-Variablen.
So definieren Sie sie, Typen sind wichtig.
Das Leerzeichen zwischen dem Sternchen und dem Zeigernamen ist optional.
Sie müssen dort kein Leerzeichen setzen. Sie können keinen Platz haben.
Was am Ende passiert, und
wir werden über das Dereferenzieren einer Variablen sprechen, ist, dass Sie normalerweise ein Leerzeichen in der Deklaration
verwenden und es dann beim Dereferenzieren nicht verwenden.
Alle diese Deklarationen sollten also ein Leerzeichen gemäß Konvention enthalten.
Der Wert eines Zeigers ist eine
Adresse, daher muss er auf den meisten Systemen intern als vorzeichenloses Bild dargestellt werden.
Es muss also noch etwas gespeichert werden. Es kommt einfach so vor, dass eine Hexadezimalzahl gespeichert wird.
Und obwohl es so gespeichert wird, wie es wie eine Ganzzahl
aussieht, sollten Sie es nicht als Ganzzahlentyp betrachten.
Die gleichen Dinge, die Sie mit ganzen Zahlen tun können, können Sie nicht unbedingt mit Zeigern tun und umgekehrt.
Auch wenn Sie versuchen, es auszudrucken, sieht es so aus, als wäre es eine hexadezimale Zahl, aber das bedeutet nicht,
dass Sie es wie eine ganze Zahl behandeln können.
Sie können beispielsweise eine Ganzzahl mit einer anderen multiplizieren,
aber Sie können einen Zeiger nicht mit einem anderen multiplizieren.
Ein Zeiger ist wirklich ein neuer Typ, es ist kein ganzzahliger Typ.
Der Prozentsatz p steht für das für Zeiger angegebene Format.
Ich werde die verschiedenen Daten für einen Zeiger anzeigen und sehen, wie diese verwendet werden.
Die vorherigen Deklarationen erstellen die
Variable, es erfolgt jedoch keine Initialisierung. Es gibt dort keine Aufgabe.
Sie möchten einem Zeiger immer einen
Wert zuweisen. Es ist sehr gefährlich, wenn Sie diesen nicht initialisieren.
Sie möchten also einen Zeiger initialisieren, wenn Sie ihn deklarieren.
Wenn Sie nicht wissen, wie Sie es initialisieren
sollen, wenn es sich nicht um die Adresse einer
anderen Variablen handelt oder Sie keinen dynamischen Speicher dafür zugewiesen haben, können Sie einen Nullzeiger verwenden.
Sie können also einen Zeiger so initialisieren, dass er auf nichts zeigt.
Sie tun dies mit null.
Sie sagen, dass instar p number für einen Zeiger auf ein int gleich null ist.
Null ist eine Konstante, die von der Standardbibliothek definiert wird.
Dies entspricht einer Null für einen Zeiger.
Es bedeutet, dass es auf nichts hinweist.
Es wird garantiert, dass nicht auf einen Speicherort verwiesen wird.
Das ist also gut, wenn Sie dies tun möchten, denn es bedeutet, dass Sie
keine Fehler machen, indem Sie versehentlich einen Pufferüberlauf durchführen oder in den
Speicher schreiben, in den Sie nicht schreiben sollen.
Durch die Initialisierung werden einige Fehler begrenzt, die Sie machen können.
Wir haben vorher ein bisschen über Null gesprochen. Wir haben über das Nullzeichen gesprochen.
Dieses Konzept unterscheidet sich vom Nullzeiger.
Ein Nullzeiger bedeutet, dass er auf nichts zeigt, und er sollte damit initialisiert werden.
Sie müssen eine Include-Direktive für Standard-Def hinzufügen. h wenn Sie hier die
Nulldefinition verwenden möchten.
Die Adresse des Betreibers. Wenn Sie Ihren Zeiger der
Adresse zuweisen möchten,
können Sie den Adressoperator einer vorhandenen Variablen verwenden.
Wenn Sie also Ihre Variable mit der Add- oder Subvariablen initialisieren möchten, die Sie
bereits deklariert haben, verwenden Sie die Adresse des Operators, das kaufmännische Und.
Wir haben dies gesehen, als wir die scanf-Funktion besprochen haben.
Hier weisen wir eine ganzzahlige Wertvariable 99 zu.
Wir erstellen einen Zeiger vom Typ int und weisen ihm die Adresse der Nummer zu.
Wir können dies tun, weil number ein int
ist und der von uns erstellte Zeiger auch auf ein int zeigt.
Alles, was wir tun müssen, nachdem der Gleichheitsoperator das kaufmännische Und verwendet hat.
Und so wird p Nummer jetzt die Adresse der Nummer enthalten.
Der Anfangswert von p number ist die Adresse der Variablennummer.
Die Deklaration der Nummer muss vor der Deklaration des Zeigers stehen,
der seine Adresse
speichert, da Sie einem Zeiger nichts zuweisen können,
dem kein Speicher zugewiesen ist.
Wenn Sie versuchen, dieser Zeigernummer zuzuweisen, existiert die Nummer nur, wenn Sie dies später tun.
Um einem Zeiger eine Adresse
zuzuweisen, muss dieser Adresse Speicher zugewiesen werden.
Andernfalls wird sich der Compiler beschweren.
Seien Sie jedoch vorsichtig, da die Deklaration eines Zeigers nichts Besonderes ist.
Sie können reguläre Variablen und Zeiger in derselben Anweisung deklarieren.
Man könnte also sagen, doppelter Wert, p-Wert f num.
In dieser Aussage hier ist dies die einzige, bei
der die zweite Variable p val ein Zeiger ist, die anderen beiden sind nur Doppelte.
Das ist ein bisschen expliziter, ein bisschen
offensichtlicher in dieser Erklärung. Aber was ist, wenn Sie in
Stern pq sagen, bedeutet dies, dass sie beide Zeiger sind und nicht.
Wir haben hier nur einen int-Zeiger, nämlich p. Die
Variable q gibt nur int ein.
Es ist ein häufiger Fehler zu glauben, dass sowohl p als auch q Zeiger sind.
Seien Sie also vorsichtig, wenn Sie einen Zeiger auf viele Variablen in derselben Zeile deklarieren.
Es ist auch eine gute Idee, Namen, die mit p beginnen, als Zeigernamen zu verwenden.
Dies wird Ihnen sagen, dass diese Variable ein Zeiger ist, wenn Sie sie nur betrachten.
Normalerweise machen Sie alle Ihre Deklarationen von Variablen am Anfang
eines Programms, normalerweise innerhalb der Hauptfunktion.
Und wenn Sie diese Variablen sehen, die
später im Programm verwendet werden, können Sie die verschiedenen Datentypen oder
die verschiedenen Zeigertypen leicht identifizieren, da sie p als Präfix haben.
In dieser Vorlesung wurde nur
erläutert, wie Sie einen Zeiger definieren, deklarieren und dann einem Zeiger
eine Adresse einer vorhandenen Variablen zuweisen können.
Jetzt gibt es Fälle, in denen Sie einer vorhandenen
Variablen nicht unbedingt einen Zeigerwert zuweisen möchten, sondern möglicherweise neuen Speicher zuweisen möchten.
Wir werden in der folgenden Vorlesung darüber sprechen. Aber jetzt werden wir es einfach halten.
Wir werden uns auf die Verwendung von Zeigern vom
Typ Ints und verschiedenen einfachen Typen wie Doubles oder Floats konzentrieren.
Und wir werden uns darauf konzentrieren, vorhandene
Variablen zuzuweisen, die Adresse von und zu sehen, wie das funktioniert.
Also lasst uns vorwärts gehen. Vielen Dank.