Der Pfeiloperator (->)
Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 45 von 63.
Beim Arbeiten mit Zeigern auf Strukturen erfordert der Zugriff auf die Struktur-Member eine spezielle Syntax. Obwohl man den Dereferenzierungsoperator und die Punktnotation zusammen verwenden könnte, bietet C einen bequemeren Operator speziell für diesen Zweck an: den Pfeiloperator (->).
Der Pfeil-Operator ermöglicht es Ihnen, auf Struktur-Member über einen Pointer auf eine saubere und lesbare Weise zuzugreifen:
ptr->memberDies ist äquivalent zum Schreiben von (*ptr).member, aber viel prägnanter.
So funktioniert es in der Praxis:
struct Point p1 = {10, 20};
struct Point *ptr = &p1;
// Verwendung des Pfeil-Operators
printf("x = %d, y = %d\n", ptr->x, ptr->y);
// Dies ist dasselbe wie:
printf("x = %d, y = %d\n", (*ptr).x, (*ptr).y);Der Pfeil-Operator macht Ihren Code übersichtlicher und lesbarer, insbesondere bei der Arbeit mit komplexen Datenstrukturen. Er ist die Standardmethode, um in der C-Programmierung über Pointer auf struct-Member zuzugreifen.
Aufgabe
EinfachErstellen Sie ein C-Programm, das die Verwendung des Pfeiloperators zum Zugriff auf Struct-Member über Pointer demonstriert. Ihr Programm sollte Folgendes tun:
- Definieren Sie ein
structnamensBookmit den folgenden Membern:- Ein Integer
idzum Speichern der Buch-ID - Ein Zeichen-Array (char array)
titlemit der Größe 40 zum Speichern des Buchtitels - Ein Zeichen-Array (char array)
authormit der Größe 30 zum Speichern des Autorennamens - Ein Float
pricezum Speichern des Buchpreises - Ein Integer
pageszum Speichern der Seitenanzahl
- Ein Integer
- Erstellen Sie in der main-Funktion eine
Book-Variable namensmyBook - Deklarieren Sie einen Pointer auf ein
Book-Struct namensbookPtr - Weisen Sie die Adresse von
myBookdembookPtrzu - Lesen Sie die folgenden Eingabewerte ein und weisen Sie diese den Struct-Membern unter Verwendung des Pfeiloperators über den Pointer zu:
- Lesen Sie einen Integer für die ID und weisen Sie ihn mit
bookPtr->idzu - Lesen Sie einen String für den Titel und weisen Sie ihn mit
bookPtr->titlezu - Lesen Sie einen String für den Autor und weisen Sie ihn mit
bookPtr->authorzu - Lesen Sie einen Float für den Preis und weisen Sie ihn mit
bookPtr->pricezu - Lesen Sie einen Integer für die Seiten und weisen Sie ihn mit
bookPtr->pageszu
- Lesen Sie einen Integer für die ID und weisen Sie ihn mit
- Führen Sie nach dem Einlesen aller Werte die folgenden Operationen mit dem Pfeiloperator durch:
- Wenden Sie einen Rabatt von 10% auf den Preis an:
bookPtr->price = bookPtr->price * 0.9; - Fügen Sie 50 Bonus-Seiten hinzu:
bookPtr->pages += 50;
- Wenden Sie einen Rabatt von 10% auf den Preis an:
- Geben Sie die Buchinformationen unter Verwendung des Pfeiloperators für den Zugriff auf jedes Member in genau diesem Format aus:
Book Information:ID: [id]Title: [title]Author: [author]Price: [price]Pages: [pages]
- Berechnen und drucken Sie den Preis pro Seite unter Verwendung des Pfeiloperators im Format:
Price per page: [price_per_page]
Diese Herausforderung testet Ihr Verständnis des Pfeiloperators für den Zugriff auf Struct-Member über Pointer. Sie üben die Verwendung der ptr->member-Syntax sowohl für das Lesen von als auch für das Schreiben in Struct-Member und demonstrieren damit, dass dies äquivalent zu (*ptr).member ist, aber viel praktischer und lesbarer.
Probier es selbst
#include <stdio.h>
#include <string.h>
// TODO: Definiere hier die Book-Struktur
int main() {
// TODO: Erstelle eine Book-Variable namens myBook
// TODO: Deklariere einen Pointer auf Book namens bookPtr
// TODO: Weise die Adresse von myBook bookPtr zu
// Eingabewerte lesen
int id;
char title[40];
char author[30];
float price;
int pages;
scanf("%d", &id);
scanf("%s", title);
scanf("%s", author);
scanf("%f", &price);
scanf("%d", &pages);
// TODO: Weise die Eingabewerte den struct-Membern unter Verwendung des Pfeil-Operators zu
// TODO: Wende 10% Rabatt auf price unter Verwendung des Pfeil-Operators an
// TODO: Füge 50 Bonusseiten unter Verwendung des Pfeil-Operators hinzu
// TODO: Gib die Buchinformationen unter Verwendung des Pfeil-Operators aus
// TODO: Berechne und gib den Preis pro Seite unter Verwendung des Pfeil-Operators 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