? Eines der Merkmale , die C macht eine so mächtige Programmiersprache ist die Möglichkeit für Programmierer Zugriff auf den Speicher direkt mit Zeigern . Pointers sind ausführlich in C für den Umgang mit Arrays von Daten verwendet , die Manipulation von Zeichenketten , Übergabe von Parametern an Funktionen und die Schaffung von verknüpften Listen und andere komplexe Datenstrukturen. Zeiger sind eine der größten Quellen der Verwirrung für Programmierer neu in der C-Sprache . Das Verständnis und die Verwendung von Zeigern ist entscheidend für die effektive C -Programmierung.
Pointer Zeiger : Achten Sie darauf , um aufzuräumen !
Funktion
Ein Objekt Zeiger oder einfach Zeiger ist eine Variable, die eine Speicheradresse , wo ein Objekt , wie eine Struktur oder float, oder ein Array von Objekten , ist enthält gespeichert. Mit dieser Speicheradresse kann der Programmierer lesen, ändern und bewegen sich durch den Speicher mit einem Zeiger .
Vorteile
Funktionen , die einen Zeiger zu ergreifen, um einer externen Objekt als Parameter übergeben können dieses Objekt ändern . Wenn die Funktion beendet wird , wird der neue Wert zugewiesen zu diesem Objekt dauerhaft. Eine Funktion kann mehrere Zeiger , so dass eine einzige Funktion , um mehrere Objekte mit einem einzigen Aufruf der Funktion ändern.
Ein Zeiger verwendet werden, um durch eine Reihe von Elementen systematisch oder zufällig navigieren mit Array- Notation , Iteration oder Grundrechenarten werden . Verwendung von Zeigern für Array-Zugriff ist schneller als die kompliziertere Implementierung gleichartiger Funktionen in anderen Sprachen. Während solche Implementierungen sind oft einfacher zu bedienen und Fehler zu vermeiden , gibt es zusätzlichen Aufwand die Leistung auswirkt.
Bedeutung
Die Fähigkeit, dynamisch zuzuweisen beliebige Mengen von Heap-Speicher während Laufzeit ist eine Technik namens " dynamische Speicherzuweisung . " Viele frühere Sprachen wie Fortran, benötigt die Größe des Speichers für Strukturen wie Arrays zur Kompilierzeit eingestellt werden zugewiesen , und die Menge an Speicher nicht während der Ausführung des Programms verändert werden. Zeiger sind in C verwendet werden, um die Adresse dynamisch zugewiesenen Speicher zu halten.
Einsatz
Ein Zeiger , indem Sie einen Stern (*) zwischen dem Namen und dem Typ deklariert ist Variablennamen .
der Wert eines Objekts im Speicher an der Adresse durch den Zeiger statt durch " Dereferenzierung " den Zeiger abgerufen. . (-> ) Zwischen dem Namen und Zeiger Dereferenzierung eines Zeigers wird , indem sie einen Stern (*) vor dem Zeiger Namen getan
Beim Umgang mit Zeigern auf Strukturen, ist ein Mitglied der Struktur durch einen Pfeil verwiesen die Mitgliedsnamen .
die Adresse eines Objekts , indem ein kaufmännisches Und ( &) vor die Variable des Objekts zugegriffen werden. Übergeben eines Objekts Adresse zu einer Funktion wird als " als Verweis zu übergeben . " Der Parameter wird als Zeiger in der Funktion Prototyp deklariert . Die Funktion dereferenziert die Parameter zu verändern ihren Wert , und der Wert bleibt erhalten, wenn die Funktion beendet .
Arrays von einer Aufteilung der Menge an Speicher benötigt, um die gewünschte Anzahl von Objekten eines bestimmten Typs zu halten, werden erstellt . Dies wird während oder nach der Erklärung mit Zeigernotation und malloc oder calloc oder während der Deklaration mit Array- Notation erreicht . Elemente eines Arrays können über Indexverweis Notation oder durch Iteration die Array-Zeiger werden. Iteration automatisch erhöht oder verringert die Adresse durch die Größe eines einzelnen Elements , so wird der Zeiger richtig am Anfang des nächsten oder vorherigen Element positioniert .
Warnung
Speicher Zuweisung und Freigabe durch den Programmierer gesteuert. Speicher, der zugewiesen wurde, müssen freigegeben, wenn es nicht mehr benötigt wird. Anderenfalls Speicher freigeben verhindert, dass sie , bis die Anwendung beendet werden. Ein " Memory Leak " tritt auf, wenn ein Verweis auf zugewiesenen Speicher ohne den Speicher freigibt erste verloren geht. Speicherlecks kann passieren, wenn ein Zeiger zugewiesen oder eine Funktion beendet, ohne Delegieren Eigentum des zugewiesenen Speicher .
Zugriff auf den Speicher über das Ende des zugeordneten Speichers ist ein häufiger Fehler bei der Arbeit mit Arrays. Dieser Fehler wird als mit einem " Array-Index außerhalb des gültigen Bereichs . " Dies kann bewirken, dass die Anwendung nicht korrekt verhalten oder unerwartet beendet .