Grundlagen der Zeiger in C-Programmierung

Merken Sie diesen Satz: Ein Zeiger ist eine Variable, die einen Speicherplatz enthält. Sie müssen den Wahnsinn des Zeigers akzeptieren, bevor er auf. Es stimmt, wenn Sie bei einer Variablen Speicherplatz zu bekommen, oder Adresse, durch die Verwendung von Betreiber ist der Zeiger ein viel mächtiger Tier.

Ein Zeiger ist eine Art von Variable. Wie andere Variablen, muss im Code deklariert werden. Des Weiteren muss es initialisiert werden, bevor es verwendet wird. Der letzte Teil ist wirklich wichtig, aber zuerst muss die Erklärung dieses Format:

Typ * Namen-

Wie, wenn Sie eine Variable deklarieren, die Art identifiziert den Zeiger als char, int, float, und so weiter. Das Name ist der Name des Zeigervariable, die, genau wie jede andere Variablennamen eindeutig sein müssen. Das Sternchen bezeichnet die Variable als Zeiger, nicht als reguläre Variable.

Die folgende Zeile deklariert einen Zeiger auf char, Kumpan:

char * sidekick-

Und diese Zeile erzeugt einen doppelten Zeiger:

doppelter Regenbogen-

Um einen Zeiger zu initialisieren, müssen Sie seinen Wert gesetzt, genau wie jede andere Variable. Der große Unterschied besteht darin, dass ein Zeiger auf die Speicherstelle initialisiert. Dieser Ort ist kein zufälliger Stelle in Erinnerung, sondern die Adresse einer anderen Variablen innerhalb des Programms. Beispielsweise:

Kumpel = führen-

Die vorangehende Anweisung initialisiert der Kumpan Variable zu der Adresse des führen Variable. Beide Größen sind char Typen-, wenn nicht, wird der Compiler wie eine nasse Katze knurren würde. Danach Anweisung ausgeführt wird, die Kumpan Zeiger enthält die Adresse des führen Variable.

Wenn Sie diesen Text hier lesen und den Kopf nur nicken, ohne etwas zu verstehen, gut! Das heißt, es ist Zeit für ein Beispiel.

Der Source-Code in einem Beispiel enthält Stellungnahmen zwei entscheidenden Linien zu helfen, zu beschreiben. Das Programm wirklich tut nichts anderes, als dass der Zeiger beweisen Kumpan enthält die Adresse oder Speicherstelle, variabler führen.

EIN BEISPIEL

# include int main () {char Blei char * Kumpel-Blei = 'A'/ * char-Variable * / Kumpel initialisieren = Blei- / * initialisieren Zeiger WICHTIG! * / Printf ( "Über variable 'lead':n")-printf("Sizett%ldn",sizeof(lead))-printf("Contentst%cn",lead)-printf("Locationt%pn",lead)-printf("And Variable 'Kumpel': n ") - printf (" Inhalt t% p n ", Kumpel) -return (0) -}

Andere Dinge zu beachten: Zeile 12 verwendet zwei Register-Escape-Sequenzen die Ausgabe anstehen. Vergessen Sie auch nicht die in Zeile 14, die den Variablen Adresse abruft.

Übung 1: Geben Sie den Quellcode aus einem Beispiel in Ihren Editor. Erstellen und ausführen.

Hier ist die Ausgabe:

Über Variable "führen": Größe 1Contents alocation 0x7fff5fbff8ffAnd Variable 'Kumpel': Inhalt 0x7fff5fbff8ff

Die Adressen (im Beispiel) sind einzigartig für jedes System, aber der Schlüssel ist zu beachten, dass der Inhalt des Zeigers Kumpan sind an die Speicherstelle der variablen Gleich führen. Das ist wegen der Zuweisung oder Initialisierung, die statt auf der Linie 9 in der Code nimmt.

Es wäre sinnlos für einen Zeiger auf lediglich eine Speicheradresse enthalten. Der Zeiger kann auch in dieser Adresse peek und den Wert bestimmen, der dort gespeichert ist. Um das zu erreichen, wird der Operator *, um den Zeiger des Variablennamen vorangestellt.

Übung 2: Ändern Sie den Quellcode von Übung 1 indem Sie die folgende Anweisung nach Zeile 16:

printf ( " t% c n Peek Wert", * Kumpel) -

Erstellen und ausführen. Hier ist die Ausgabe:

Über Variable "führen": Größe 1Contents alocation 0x7fff5fbff8ffAnd Variable 'Kumpel': Inhalt 0x7fff5fbff8ffPeek Wert A

Wenn Sie die * (Stern) vor einem initialisierten Zeiger Variablennamen angeben, werden die Ergebnisse der Inhalt der Adresse. Der Wert wird auf der Grundlage der Art des Zeigers interpretiert. In diesem Beispiel * Kumpel in der stellt die char-Wert an einem Speicherplatz gespeichert gehalten Kumpan Variable, die tatsächlich die gleiche wie die Speicherstelle variabel ist führen.

Um es anders zu sagen:

  • Eine Zeigervariable enthält einen Speicherplatz.

  • Das *Zeiger Variable späht in den Wert an diesem Speicherplatz gespeichert.

Menü