Der Dereferenzierungsoperator (*)
Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 4 von 63.
Nachdem Sie nun wissen, wie man Adressen in Pointern speichert, müssen Sie lernen, wie Sie auf den tatsächlichen Wert zugreifen, der an dieser Speicheradresse gespeichert ist. Der Dereferenzierungsoperator (*) ermöglicht es Ihnen, dem Pointer zu „folgen“, um den Wert zu erhalten, auf den er zeigt.
Wenn Sie den *-Operator vor eine Zeigervariable setzen, greift er auf den Wert zu, der an der Speicheradresse gespeichert ist, die der Zeiger hält. Stellen Sie es sich so vor, als würden Sie sagen: „Gib mir das, was sich in dem Raum an dieser Adresse befindet.“
int age = 25;
int *ptr = &age;
printf("%d", *ptr); // Gibt 25 aus - den Wert von ageEs ist wichtig zu verstehen, dass das Sternchen (*) in C zwei verschiedene Bedeutungen hat. Bei der Deklaration eines Pointers wie int *ptr; gibt das Sternchen an, dass ptr ein Pointer ist. Wenn es mit einem bestehenden Pointer wie *ptr verwendet wird, dereferenziert es den Pointer, um auf den Wert zuzugreifen, auf den er zeigt.
Der Dereferenzierungsoperator ist essenziell, da er den Zeiger-Zyklus vervollständigt: Sie können eine Adresse in einem Zeiger mit & speichern und dann den Wert an dieser Adresse mit * abrufen. Dies ermöglicht es Ihnen, indirekt auf Variablen über deren Speicheradressen zuzugreifen und diese zu ändern.
Aufgabe
EinfachSchreiben Sie ein C-Programm, das den vollständigen Pointer-Workflow demonstriert: Deklaration, Adresszuweisung und Dereferenzierung. Ihr Programm sollte:
- Eine Integer-Variable namens
valuedeklarieren und sie mit dem Wert 75 initialisieren - Eine Float-Variable namens
pricedeklarieren und sie mit dem Wert 19.99 initialisieren - Einen Pointer auf einen Integer namens
value_ptrdeklarieren - Einen Pointer auf einen Float namens
price_ptrdeklarieren - Den Adressoperator verwenden, um die Adresse von
valueanvalue_ptrzuzuweisen - Den Adressoperator verwenden, um die Adresse von
priceanprice_ptrzuzuweisen - Den Dereferenzierungsoperator verwenden, um den Wert von
valueübervalue_ptrauszugeben - Den Dereferenzierungsoperator verwenden, um den Wert von
priceüberprice_ptrmit genau 2 Dezimalstellen auszugeben
Ihre Ausgabe sollte die dereferenzierten Werte im folgenden Format anzeigen:
Value through pointer: 75
Price through pointer: 19.99Die Herausforderung testet Ihr Verständnis dafür, wie der Dereferenzierungsoperator den Wert der ursprünglichen Variablen abruft, indem er der im Pointer gespeicherten Adresse folgt.
Spickzettel
Der Dereferenzierungsoperator (*) ermöglicht es Ihnen, auf den Wert zuzugreifen, der an der Speicheradresse gespeichert ist, die ein Pointer hält.
int age = 25;
int *ptr = &age;
printf("%d", *ptr); // Gibt 25 aus - den Wert von ageDas Sternchen (*) hat in C zwei verschiedene Bedeutungen:
- In Deklarationen wie
int *ptr;- gibt an, dassptrein Pointer ist - Bei bestehenden Pointern wie
*ptr- dereferenziert den Pointer, um auf den Wert zuzugreifen, auf den er zeigt
Der Dereferenzierungsoperator vervollständigt den Pointer-Zyklus: Speichern Sie eine Adresse mit & und rufen Sie dann den Wert an dieser Adresse mit * ab.
Probier es selbst
#include <stdio.h>
int main() {
// TODO: Schreiben Sie Ihren Code hier
// 1. Deklarieren und initialisieren Sie die Variablen
// 2. Deklarieren Sie die Pointer
// 3. Weisen Sie den Pointern Adressen zu
// 4. Geben Sie die dereferenzierten Werte aus
return 0;
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Zeiger-Grundlagen
Was ist ein Zeiger?Zeiger deklarierenDer Adressoperator (&)Der Dereferenzierungsoperator (*)NULL-ZeigerZusammenfassung: Zeiger-Grundlagen4Projekt: Einfaches Text-Tool
ProjektübersichtZeichen zählen2Pointer und Arrays
Array-Namen als PointerArray-Elemente - PointerPointer-ArithmetikPointer vergleichenWiederholung: Array-Durchlauf mit Pointern5Zeiger und Funktionen
Wertübergabe (Pass-by-Value)Zeiger an Funktionen übergebenVariablen über Zeiger ändernEin klassisches Beispiel: SwapArrays an Funktionen übergebenZusammenfassung: Zeiger als Funktionsargumente8Structs und Zeiger
Zeiger auf StructsDer Pfeiloperator (->)Structs per Wert übergebenÜbergabe von Struct-ZeigernDynamische Allokation von StructsZusammenfassung: Struct ändern - Ptr11Finale Wiederholungsaufgaben
Wiederholung: Dynamische String-KonkatenationWiederholung: Array von StructsWiederholung: Wortfrequenz-Zähler3Character-Arrays und Strings
Strings als char-ArraysDer Null-TerminatorString-Eingabe mit scanfVerwendung von strlen()Verwendung von strcpy()Verwendung von strcat()Verwendung von strcmp()Zusammenfassung: Grundlegende String-Funktionen