Menu
CoddyTech

Zeiger auf Structs

Teil des Abschnitts Logik & Ablauf der C-Journey von Coddy. Lektion 44 von 63.

Da du nun sicher im Umgang mit Structs bist, ist es an der Zeit, sie mit einem weiteren leistungsstarken C-Konzept zu kombinieren: Zeigern. Genau wie du Zeiger auf grundlegende Datentypen wie int oder char erstellen kannst, kannst du auch Zeiger erstellen, die die Adresse einer Struct-Variablen enthalten.

Die Syntax zum Deklarieren eines Zeigers auf eine Struktur folgt demselben Muster wie andere Zeigerdeklarationen:

struct StructureName *pointerName;

Zum Beispiel mit unserer vertrauten Point-Struktur:

struct Point p1 = {10, 20};
struct Point *ptr;

Dadurch wird ein Zeiger namens ptr erstellt, der die Adresse einer Point-Struktur speichern kann. Damit der Zeiger tatsächlich auf unsere Strukturvariable zeigt, verwendest du den Adressoperator:

ptr = &p1;

Um über den Zeiger auf ein Element zuzugreifen, dereferenziere ihn und verwende dann den Punktoperator. Die Klammern sind erforderlich, weil . stärker bindet als *:

printf("%d", (*ptr).x); // gleichbedeutend mit p1.x

Jetzt enthält ptr die Speicheradresse der Strukturvariablen p1. Dadurch eröffnen sich neue Möglichkeiten, mit Strukturen zu arbeiten, 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.

challenge icon

Aufgabe

Einfach

Erstelle ein C-Programm, das den Umgang mit Zeigern auf Strukturen demonstriert. Dein Programm sollte Folgendes tun:

  1. Definiere ein struct namens Product mit den folgenden Mitgliedern:
    • Eine Ganzzahl id, um die Produkt-ID zu speichern
    • Ein Zeichenarray name mit der Größe 25, um den Produktnamen zu speichern
    • Eine Fließkommazahl price, um den Produktpreis zu speichern
    • Eine Ganzzahl quantity, um die verfügbare Menge zu speichern
  2. Erstelle in der Hauptfunktion eine Product-Variable namens item und initialisiere sie mit den folgenden Werten:
    • ID: 501
    • Name: "Laptop"
    • Preis: 899.99
    • Menge: 15
  3. Deklariere einen Zeiger auf eine Product-Struktur namens itemPtr
  4. Weise itemPtr mithilfe des Adressoperators die Adresse der Variablen item zu
  5. Gib die ursprünglichen Produktinformationen aus, indem du direkt auf die Strukturmitglieder zugreifst (mit dem Punktoperator), und zwar exakt in diesem Format:
    • Original Product Info:
    • ID: [id]
    • Name: [name]
    • Price: [price]
    • Quantity: [quantity]
  6. Gib dieselben Produktinformationen aus, indem du über den Zeiger auf die Strukturmitglieder zugreifst (mit dem Dereferenzierungsoperator und der Punktnotation: (*itemPtr).member), und zwar exakt in diesem Format:
    • Product Info via Pointer:
    • ID: [id]
    • Name: [name]
    • Price: [price]
    • Quantity: [quantity]
  7. Überprüfe, ob der Zeiger korrekt auf die Struktur zeigt, indem du die Speicheradressen exakt in 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 identisch 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: Definiere hier die Product-Struktur

int main() {
    // TODO: Schreibe hier deinen Code
    // 1. Erstelle und initialisiere die Product-Variable 'item'
    // 2. Deklariere einen Zeiger auf Product namens 'itemPtr'
    // 3. Weise 'itemPtr' die Adresse von 'item' zu
    // 4. Gib die ursprünglichen Produktinformationen mit dem Punktoperator aus
    // 5. Gib die Produktinformationen über den Zeiger mit (*itemPtr).member aus
    // 6. Gib die Adressen aus und überprüfe sie
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf

Übe selbstständig: Online-C-Compiler