Der Pfeiloperator (->)
Teil des Abschnitts Logik & Ablauf 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 Pfeiloperator macht deinen Code übersichtlicher und leichter lesbar, insbesondere bei der Arbeit mit komplexen Datenstrukturen. Er ist die Standardmethode, um in der C-Programmierung über Zeiger auf Strukturmitglieder zuzugreifen.
Aufgabe
EinfachErstelle ein C-Programm, das die Verwendung des Pfeiloperators für den Zugriff auf Struct-Mitglieder über Zeiger demonstriert. Dein Programm sollte:
- Eine
structnamensBookmit den folgenden Mitgliedern definieren:- Eine Ganzzahl
idzum Speichern der Buch-ID - Ein Zeichen-Array
titleder Größe 40 zum Speichern des Buchtitels - Ein Zeichen-Array
authorder Größe 30 zum Speichern des Namens des Autors - Eine Gleitkommazahl
pricezum Speichern des Buchpreises - Eine Ganzzahl
pageszum Speichern der Seitenanzahl
- Eine Ganzzahl
- In der main-Funktion eine
Book-Variable namensmyBookerstellen - Einen Zeiger auf eine
Book-Struktur namensbookPtrdeklarieren - Die Adresse von
myBookbookPtrzuweisen - Die folgenden Eingabewerte einlesen und sie mithilfe des Pfeiloperators über den Zeiger den Struct-Mitgliedern zuweisen:
- Eine Ganzzahl für die ID einlesen und sie mithilfe von
bookPtr->idzuweisen - Eine Zeichenfolge für den Titel einlesen und sie mithilfe von
bookPtr->titlezuweisen - Eine Zeichenfolge für den Autor einlesen und sie mithilfe von
bookPtr->authorzuweisen - Eine Gleitkommazahl für den Preis einlesen und sie mithilfe von
bookPtr->pricezuweisen - Eine Ganzzahl für die Seiten einlesen und sie mithilfe von
bookPtr->pageszuweisen
- Eine Ganzzahl für die ID einlesen und sie mithilfe von
- Nach dem Einlesen aller Werte die folgenden Operationen mithilfe des Pfeiloperators durchführen:
- Einen Rabatt von 10 % auf den Preis anwenden:
bookPtr->price = bookPtr->price * 0.9; - 50 Bonusseiten hinzufügen:
bookPtr->pages += 50;
- Einen Rabatt von 10 % auf den Preis anwenden:
- Die Buchinformationen mithilfe des Pfeiloperators für den Zugriff auf jedes Mitglied im folgenden exakten Format ausgeben:
Book Information:ID: [id]Title: [title]Author: [author]Price: [price]Pages: [pages]
- Den Preis pro Seite mithilfe des Pfeiloperators berechnen und im folgenden Format ausgeben:
Price per page: [price_per_page]
Diese Aufgabe testet dein Verständnis des Pfeiloperators für den Zugriff auf Struct-Mitglieder über Zeiger. Du übst die Verwendung der ptr->member-Syntax sowohl zum Lesen aus als auch zum Schreiben in Struct-Mitglieder und demonstrierst dabei, dass sie äquivalent zu (*ptr).member, aber wesentlich praktischer und besser lesbar ist.
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 Logik & Ablauf
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Übe selbstständig: Online-C-Compiler