Zeiger auf Structs
Teil des Abschnitts Logik & Ablauf der C-Journey von Coddy. Lektion 44 von 63.
Da du nun sicher im Umgang mit Strukturen bist, ist es an der Zeit, sie mit einem weiteren leistungsfähigen C-Konzept zu kombinieren: Zeigern. Ebenso wie du Zeiger auf grundlegende Datentypen wie int oder char erstellen kannst, kannst du auch Zeiger erstellen, die die Adresse einer Strukturvariablen enthalten.
Die Syntax zum Deklarieren eines Zeigers auf eine Struktur folgt demselben Muster wie andere Zeigerdeklarationen:
struct StructureName *pointerName;Zum Beispiel unter Verwendung unserer vertrauten Point-Struktur:
struct Point p1 = {10, 20};
struct Point *ptr;Dies erstellt einen Zeiger namens ptr, der die Adresse einer Point-Struktur speichern kann. Damit der Zeiger tatsächlich auf unsere Strukturvariable zeigt, verwendest du den Adressoperator:
ptr = &p1;Jetzt enthält ptr die Speicheradresse der Strukturvariablen p1. Dies eröffnet neue Möglichkeiten für die Arbeit mit Strukturen, insbesondere wenn du sie an Funktionen übergibst oder den Speicher dynamisch verwaltest. Zeiger auf Strukturen sind unverzichtbar, um komplexere Datenstrukturen zu erstellen und effiziente C-Programme zu schreiben.
Aufgabe
EinfachErstelle ein C-Programm, das die Arbeit mit Zeigern auf Strukturen demonstriert. Dein Programm sollte:
- Eine
structnamensProductmit den folgenden Mitgliedern definieren:- Eine Ganzzahl
idzum Speichern der Produkt-ID - Ein Zeichenarray
namemit der Größe 25 zum Speichern des Produktnamens - Eine Gleitkommazahl
pricezum Speichern des Produktpreises - Eine Ganzzahl
quantityzum Speichern der verfügbaren Menge
- Eine Ganzzahl
- Erstelle in der main-Funktion eine
Product-Variable namensitemund initialisiere sie mit den folgenden Werten:- ID: 501
- Name: "Laptop"
- Preis: 899.99
- Menge: 15
- Deklariere einen Zeiger auf eine
Product-Struktur namensitemPtr - Weise
itemPtrmithilfe des Adressoperators die Adresse der Variableitemzu - Gib die ursprünglichen Produktinformationen aus, indem du direkt auf die Strukturmitglieder zugreifst (unter Verwendung des Punktoperators) und dabei genau dieses Format verwendest:
Original Product Info:ID: [id]Name: [name]Price: [price]Quantity: [quantity]
- Gib dieselben Produktinformationen aus, indem du über den Zeiger auf die Strukturmitglieder zugreifst (unter Verwendung des Dereferenzierungsoperators und der Punktnotation:
(*itemPtr).member) und dabei genau dieses Format verwendest:Product Info via Pointer:ID: [id]Name: [name]Price: [price]Quantity: [quantity]
- Überprüfe, ob der Zeiger korrekt auf die Struktur zeigt, indem du die Speicheradressen in genau diesem Format ausgibst:
Address of item: [address]Value of itemPtr: [address]Address verification: [result]
Gib bei der Adressüberprüfung Match aus, wenn die Adressen gleich sind, oder No Match, wenn sie unterschiedlich sind.
Diese Aufgabe prüft dein Verständnis der Deklaration eines Zeigers auf eine Struktur, der Adresszuweisung mithilfe des Adressoperators und des Zugriffs auf Strukturmitglieder über Zeiger mithilfe des Dereferenzierungsoperators in Kombination mit der Punktnotation. Außerdem überprüfst du, ob der Zeiger korrekt die Adresse der Strukturvariablen enthält.
Probier es selbst
#include <stdio.h>
#include <string.h>
// TODO: Definieren Sie hier das Product-Struct
int main() {
// TODO: Schreiben Sie hier Ihren Code
// 1. Erstellen und initialisieren Sie die Product-Variable 'item'
// 2. Deklarieren Sie einen Zeiger auf Product namens 'itemPtr'
// 3. Weisen Sie die Adresse von 'item' an 'itemPtr' zu
// 4. Geben Sie die ursprünglichen Produktinformationen mit dem Punkt-Operator aus
// 5. Geben Sie die Produktinformationen über den Zeiger mit (*itemPtr).member aus
// 6. Adressen ausgeben und überprüfen
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