Was ist der Zeiger in C?
Der Zeiger in C ist eine Variable, die die Adresse einer anderen Variablen speichert. Ein Zeiger kann auch verwendet werden, um auf eine andere Zeigerfunktion zu verweisen. Ein Zeiger kann inkrementiert / dekrementiert werden, d. H. Um auf den nächsten / vorherigen Speicherplatz zu zeigen. Der Zweck des Zeigers besteht darin, Speicherplatz zu sparen und eine schnellere Ausführungszeit zu erreichen.
Verwenden von Zeigern in C
Wenn wir eine Variable v vom Typ int deklarieren, speichert v tatsächlich einen Wert.
v ist jetzt gleich Null.
Abgesehen vom Wert hat jede Variable jedoch auch ihre Adresse (oder einfach ausgedrückt, wo sie sich im Speicher befindet). Die Adresse kann abgerufen werden, indem vor dem Variablennamen ein kaufmännisches Und (&) eingefügt wird.
Wenn Sie die Adresse einer Variablen auf dem Bildschirm drucken, wird sie angezeigt wie eine völlig zufällige Zahl (außerdem kann sie von Lauf zu Lauf unterschiedlich sein).
Versuchen wir dies in der Praxis mit dem Zeiger in C. Beispiel
Die Ausgabe dieses Programms ist -480613588.
Was ist nun ein Zeiger? Anstatt einen Wert zu speichern, speichert ein Zeiger die Adresse einer Variablen.
Zeigervariable
Int * y = & v;
VARIABLE |
POINTER |
Ein Wert, der in einer benannten Speicher- / Speicheradresse |
Deklarieren eines Zeigers
Wie Variablen sind auch Zeiger in C progra mming muss deklariert werden, bevor sie in Ihrem Programm verwendet werden können. Zeiger können beliebig benannt werden, solange sie den Namensregeln von C entsprechen. Eine Zeigerdeklaration hat die folgende Form.
data_type * pointer_variable_name;
Hier
- data_type ist der Basistyp des Zeigers für die Variablentypen von C und gibt den Typ der Variablen an, auf die der Zeiger zeigt.
- Das Sternchen (*: das gleiche verwendete Sternchen) für die Multiplikation), der ein Indirektionsoperator ist, deklariert einen Zeiger.
Sehen wir uns einige gültige Zeigerdeklarationen in diesem Tutorial für C-Zeiger an:
Initialisieren Sie einen Zeiger
Nachdem wir einen Zeiger deklariert haben, initialisieren wir ihn wie Standardvariablen mit einer Variablenadresse. Wenn Zeiger in der C-Programmierung nicht nicht initialisiert und im Programm verwendet werden, sind die Ergebnisse unvorhersehbar und möglicherweise katastrophal.
Um die Adresse einer Variablen abzurufen, verwenden wir den kaufmännischen Und-Operator (&), der vor dem Namen einer Variablen steht, deren Adresse wir benötigen. Die Zeigerinitialisierung erfolgt mit der folgenden Syntax.
Zeigersyntax
pointer = &variable;
Ein einfaches Programm zur Zeigerillustration ist unten angegeben:
Ausgabe:
Address stored in a variable p is:60ff08Value stored in a variable p is:10
Operator | Bedeutung |
* | dient zwei Zwecken
|
& | Dient nur einem Zweck
|
Zeigertypen in C
Im Folgenden sind die verschiedenen Arten von Zeigern in C aufgeführt:
Nullzeiger
Wir können einen Nullzeiger erstellen, indem wir während der Zeigerdeklaration einen Nullwert zuweisen. Diese Methode ist nützlich, wenn dem Zeiger keine Adresse zugewiesen ist. Ein Nullzeiger enthält immer den Wert 0.
Das folgende Programm veranschaulicht die Verwendung eines Nullzeigers:
#include <stdio.h>int main(){int *p = NULL; //null pointerprintf("The value inside variable p is:\n%x”,p);return 0;}
Ausgabe:
The value inside variable p is:0
Leerzeiger
In der C-Programmierung wird ein Leerzeiger auch als generischer Zeiger bezeichnet. Es hat keinen Standarddatentyp. Ein void-Zeiger wird mit dem Schlüsselwort void erstellt. Es kann verwendet werden, um eine Adresse einer beliebigen Variablen zu speichern.
Das folgende Programm veranschaulicht die Verwendung eines ungültigen Zeigers:
#include <stdio.h>int main(){void *p = NULL; //void pointerprintf("The size of pointer is:%d\n",sizeof(p));return 0;}
Ausgabe:
The size of pointer is:4
Wilder Zeiger
Ein Zeiger wird als wilder Zeiger bezeichnet, wenn er nicht mit irgendetwas initialisiert wird. Diese Arten von C-Zeigern sind nicht effizient, da sie auf einen unbekannten Speicherort verweisen können, was zu Problemen in unserem Programm führen und zum Absturz des Programms führen kann. Man sollte immer vorsichtig sein, wenn man mit wilden Zeigern arbeitet.
Das folgende Programm veranschaulicht die Verwendung eines Platzhalters:
#include <stdio.h>int main(){int *p; //wild pointerprintf("\n%d",*p);return 0;}
Ausgabe
timeout: the monitored command dumped coresh: line 1: 95298 Segmentation fault timeout 10s main
Andere Arten von Zeigern in „c“ sind wie folgt:
- Dangling-Zeiger
- Komplexer Zeiger
- Naher Zeiger
- Fernzeiger
- Riesiger Zeiger
Zeiger für direkten und indirekten Zugriff
In C gibt es zwei äquivalente Möglichkeiten Zugriff auf und Bearbeitung eines Variableninhalts
- Direkter Zugriff: Wir verwenden direkt den Variablennamen
- Indirekter Zugriff: Wir verwenden einen Zeiger auf die Variable
Lassen Sie uns dies mit Hilfe des folgenden Programms verstehen.
Nach dem fehlerfreien Kompilieren des Programms lautet das Ergebnis:
Direct access, var = 1Indirect access, var = 1The address of var = 4202496The address of var = 4202496Indirect access, var = 48
Zeigerarithmetik in C
Die Zeigeroperationen sind in der folgenden Abbildung zusammengefasst.
Prioritätsoperation (Priorität)
Bei der Arbeit mit C-Zeigern müssen wir beachten Die folgenden Prioritätsregeln:
Wenn ein P-Zeiger auf eine X-Variable zeigt, kann * P überall dort verwendet werden, wo X geschrieben werden kann.
Die folgenden Ausdrücke sind äquivalent:
Im letzteren Fall werden Klammern benötigt: Da die unären Operatoren * und ++ von rechts nach links ausgewertet werden, ohne die Klammern den Zeiger P. würde inkrementiert werden, nicht das Objekt, auf das P zeigt.
Die folgende Tabelle zeigt die arithmetische und grundlegende Operation, die beim Umgang mit C-Zeigern verwendet werden kann.
Operation | Erläuterung |
Zuweisung | int * P1, * P2 P1 = P2; P1 und P2 zeigen auf dieselbe ganzzahlige Variable |
Inkrementierung und Dekrementierung | Int * P1; P1 ++; P1–; |
Hinzufügen eines Versatzes (Konstante) | Dadurch kann der Zeiger N Elemente in einer Tabelle verschieben. Der Zeiger wird um das N-fache der Anzahl der Bytes des Variablentyps erhöht oder verringert. P1 + 5; |
C-Zeiger & Arrays mit Beispielen
Traditionell verwenden wir Greifen Sie über den Index auf die Array-Elemente zu. Diese Methode kann jedoch mithilfe von Zeigern entfernt werden. Zeiger erleichtern den Zugriff auf jedes Array-Element.
Ausgabe
12345
Durch Hinzufügen einer bestimmten Zahl zu einem Zeiger wird die Zeigerposition auf den Wert verschoben, der durch eine Additionsoperation erhalten wird. Angenommen, p ist ein Zeiger, der derzeit auf den Speicherplatz 0 zeigt. Wenn wir die folgende Additionsoperation p + 1 ausführen, wird er folgendermaßen ausgeführt:
Da p nach dem Hinzufügen von 1 derzeit auf die Position 0 zeigt, wird der Wert 1, und daher zeigt der Zeiger auf die Speicherstelle 1.
C Zeiger und Zeichenfolgen mit Beispielen
Eine Zeichenfolge ist ein Array von Zeichenobjekten, die mit einem Nullzeichen „\ 0“ enden. Wir können Strings mit Zeigern manipulieren. Dieser Zeiger im C-Beispiel erläutert diesen Abschnitt.
Ausgabe
First character is:HNext character is:ePrinting all the characters in a stringHelloGuru99!
Eine andere Möglichkeit, Zeichenfolgen zu behandeln, besteht in einem Array von Zeigern wie im Folgenden Programm:
Ausgabe:
Please remember these materials:ironcoppergold
Vorteile von Zeigern in C
- Zeiger sind nützlich für den Zugriff Speicherorte.
- Zeiger bieten eine effiziente Möglichkeit für den Zugriff auf die Elemente einer Array-Struktur.
- Zeiger werden sowohl für die dynamische Speicherzuweisung als auch für die Freigabe verwendet.
- Zeiger werden verwendet, um komplexe Datenstrukturen wie verknüpfte Listen, Diagramme, Bäume usw. zu bilden.
Nachteile von Zeigern in C
- Zeiger sind etwas komplex zu verstehen.
- Zeiger können zu verschiedenen Fehlern wie Segmentierungsfehlern führen oder auf einen Speicherort zugreifen, der überhaupt nicht erforderlich ist.
- Wenn einem Zeiger ein falscher Wert zugewiesen wird, Dies kann zu Speicherbeschädigungen führen.
- Zeiger sind auch für Speicherverluste verantwortlich.
- Zeiger sind vergleichsweise langsamer als die Variablen.
- Programmierer finden es sehr schwierig, mit den Zeigern zu arbeiten. Daher liegt es in der Verantwortung des Programmierers, einen Zeiger sorgfältig zu manipulieren.
Zusammenfassung
- Ein Zeiger ist nichts anderes als ein Speicherort, an dem Daten gespeichert werden.
- Ein Zeiger wird verwendet, um auf den Speicherort zuzugreifen.
- Es gibt verschiedene Arten von Zeigern, wie z. B. einen Nullzeiger, einen Platzhalter, einen ungültigen Zeiger und andere Arten von Zeigern.
- Zeiger können mit Array und String verwendet werden, um effizienter auf Elemente zuzugreifen.
- Wir können Funktionszeiger erstellen, um eine Funktion dynamisch aufzurufen.
- Arithmetische Operationen können mit einem Zeiger ausgeführt werden, der als Zeigerarithmetik bezeichnet wird.
- Zeiger können auch auf Funktionen verweisen, die es einfach machen, verschiedene Funktionen aufzurufen, wenn ein Array von Zeigern definiert wird.
- Wenn Sie verschiedene variable Datentypen behandeln möchten, können Sie dies tun Verwenden Sie einen typecast void-Zeiger.