Zeiger in der C-Programmierung mit Beispielen
Ein Zeiger ist eine Variable, die die Adresse einer anderen Variablen speichert. Im Gegensatz zu anderen Variablen, die Werte eines bestimmten Typs enthalten, enthält der Zeiger die Adresse einer Variablen. Beispielsweise enthält eine Ganzzahlvariable einen Ganzzahlwert (oder Sie können sagen, er speichert ihn), ein Ganzzahlzeiger enthält jedoch die Adresse einer Ganzzahlvariablen. In diesem Handbuch werden Zeiger in der C-Programmierung anhand von Beispielen erläutert.
Bevor wir uns mit Zeigern in C befassen, nehmen wir ein einfaches Beispiel, um zu verstehen, was wir unter der Adresse einer Variablen verstehen.
Ein einfaches Beispiel, um zu verstehen, wie auf die Adresse einer Variablen ohne Zeiger zugegriffen werden kann?
In diesem Programm haben wir eine Variable num vom Typ int. Der Wert von num ist 10 und dieser Wert muss irgendwo im Speicher gespeichert werden, oder? Jeder Variablen, die den Wert dieser Variablen enthält, wird ein Speicherplatz zugewiesen. Dieser Speicherplatz hat eine Adresse. Zum Beispiel leben wir in einem Haus und unser Haus hat eine Adresse, die anderen Menschen hilft, unser Haus zu finden. Auf die gleiche Weise wird der Wert der Variablen in einer Speicheradresse gespeichert, wodurch das C-Programm diesen Wert bei Bedarf finden kann.
Nehmen wir also an, die der Variablen num zugewiesene Adresse lautet 0x7fff5694dc58
, was bedeutet, dass jeder Wert, den wir num zuweisen würden, an folgendem Speicherort gespeichert werden sollte: 0x7fff5694dc58
. Siehe das folgende Diagramm.
Ausgabe:
Value of variable num is: 10Address of variable num is: 0x7fff5694dc58
Ein einfaches Beispiel für Zeiger in C
Dieses Programm zeigt, wie ein Zeiger deklariert und verwendet wird. Es gibt einige andere Dinge, die wir mit Zeigern tun können. Wir haben sie später in diesem Handbuch besprochen. Im Moment müssen wir nur wissen, wie ein Zeiger mit der Adresse einer Variablen verknüpft wird.
Wichtiger zu beachtender Punkt ist: Der Datentyp des Zeigers und die Variable muss übereinstimmen, ein int-Zeiger kann die Adresse der int-Variablen enthalten, ähnlich kann ein mit dem Datentyp float deklarierter Zeiger die Adresse einer float-Variablen enthalten. Im folgenden Beispiel sind sowohl der Zeiger als auch die Variable vom Typ int.
Ausgabe:
Address of variable num is: 0x7fff5694dc58
C-Zeiger – Operatoren, die mit Zeigern verwendet werden
Erläutern wir die Operatoren & und *, die mit Zeigern in C verwendet werden.
„Adresse von“ (&) Operator
Wir haben bereits im ersten Beispiel gesehen, dass wir die Adresse einer Variablen mit kaufmännischem Und anzeigen können Ich habe & num verwendet, um auf die Adresse der Variablen num zuzugreifen. Der Operator & wird auch als Operator „Address of“ bezeichnet.
printf("Address of var is: %p", &num);
Zu beachtender Punkt:% p ist ein Formatbezeichner, mit dem die Adresse im Hex-Format angezeigt wird.
Jetzt wissen Sie, wie Sie sie erhalten die Adresse einer Variablen, aber wie speichert man diese Adresse in einer anderen Variablen? Hier kommen Zeiger ins Spiel. Wie am Anfang dieses Handbuchs erwähnt, werden Zeiger in der C-Programmierung verwendet, um die Adresse einer anderen Variablen zu speichern.
Der Zeiger ist genau wie eine andere Variable. Der Hauptunterschied besteht darin, dass er die Adresse einer anderen Variablen speichert und nicht ein Wert.
„Wert an Adresse“ (*) Operator
Der Operator * wird auch als Operator „Wert an Adresse“ bezeichnet.
Deklarieren eines Zeigers ?
Das Obige sind die wenigen Beispiele für Zeigerdeklarationen. Wenn Sie einen Zeiger zum Speichern der Adresse der Ganzzahlvariablen benötigen, sollte der Datentyp des Zeigers int sein. Gleicher Fall gilt für die anderen Datentypen.
Mit dem Operator * können wir über einen Zeiger auf den Wert einer Variablen zugreifen.
Zum Beispiel:
double a = 10;double *p;p = &a;
* p würde uns den Wert der Variablen a geben. Die folgende Anweisung würde 10 als Ausgabe anzeigen.
printf("%d", *p);
Ähnlich, wenn wir * Zeiger wie diesen einen Wert zuweisen:
*p = 200;
Dies würde den Wert von v ändern ariable a. Die obige Anweisung ändert den Wert von a von 10 auf 200.
Beispiel eines Zeigers, der die Verwendung der Ausgabe & und *
demonstriert :
Value of variable var is: 10Value of variable var is: 10Address of variable var is: 0x7fff5ed98c4cAddress of variable var is: 0x7fff5ed98c4cAddress of pointer p is: 0x7fff5ed98c50
Nehmen wir einige Beispiele, um es besser zu verstehen –
Nehmen wir an, wir haben eine char-Variable ch und einen Zeiger ptr, der die Adresse von ch enthält.
char ch="a";char *ptr;
Lesen Sie den Wert von ch
printf("Value of ch: %c", ch);orprintf("Value of ch: %c", *ptr);
Ändern Sie den Wert von ch
ch = "b";or*ptr = "b";
Der obige Code würde den Wert a durch ersetzen. b .
Können Sie die Ausgabe des folgenden C-Programms erraten?
Ausgabe:
Address of var is: 0x7fff5d027c58Address of var is: 0x7fff5d027c58Value of var is: 10Value of var is: 10Value of var is: 10Value of pointer p is: 0x7fff5d027c58Address of pointer p is: 0x7fff5d027c50
Weitere Themen bei Zeigern
1) Zeiger auf Zeiger – Ein Zeiger kann auf einen anderen Zeiger zeigen (was bedeutet, dass er die Adresse eines anderen Zeigers speichern kann). Solche Zeiger werden als Doppelzeiger ODER Zeiger auf Zeiger bezeichnet.
2) Übergeben von Zeigern an eine Funktion – Zeiger können auch als Argument an eine Funktion übergeben werden. Mit dieser Funktion kann eine Funktion als Referenz aufgerufen und ein Array während des Aufrufs an eine Funktion übergeben werden.
3) Funktionszeiger – Ein Funktionszeiger ist wie ein anderer Zeiger und wird zum Speichern der Adresse einer Funktion verwendet. Der Funktionszeiger kann auch zum Aufrufen einer Funktion im C-Programm verwendet werden.