Menu
Coddy logo textTech

Pointer vergleichen

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

Sie haben gelernt, wie man sich mithilfe von Zeigerarithmetik durch Arrays bewegt. Jetzt werden Sie entdecken, dass Zeiger auch mit denselben Vergleichsoperatoren verglichen werden können, die Sie bei regulären Variablen verwenden: ==, !=, < und >.

Wenn Sie zwei Pointer vergleichen, vergleichen Sie deren Speicheradressen. Dies ist besonders nützlich, wenn beide Pointer auf Elemente innerhalb desselben Arrays zeigen, da es Ihnen ermöglicht, deren relative Positionen im Speicher zu bestimmen.

int numbers[5] = {10, 20, 30, 40, 50};
int *start = numbers;        // Zeigt auf das erste Element
int *end = numbers + 4;      // Zeigt auf das letzte Element

if (start < end) {
    printf("start comes before end in memory");
}

Der Zeigervergleich wird in Schleifenbedingungen besonders mächtig. Anstatt eine Zählervariable zu verwenden, können Sie Ihre aktuelle Zeigerposition mit einem Zielzeiger vergleichen, um zu steuern, wann die Schleife stoppen soll. Dies erzeugt eleganten, effizienten Code für das Durchlaufen von Arrays.

Die entscheidende Erkenntnis ist, dass ptr1 < ptr2 besagt, dass ptr1 auf ein Element zeigt, das im Array früher erscheint als das Element, auf das ptr2 zeigt. Diese Beziehung macht den Zeigervergleich zu einer natürlichen Wahl für die Steuerung von Schleifen, die Arrays sequenziell verarbeiten.

challenge icon

Aufgabe

Einfach

Schreibe ein C-Programm, das einen Array mithilfe eines Zeigervergleichs durchläuft und Elemente innerhalb eines bestimmten Bereichs findet. Dein Programm sollte:

  1. Ein Integer-Array namens scores mit 8 Elementen deklarieren und mit den Werten {45, 78, 92, 63, 87, 34, 91, 56} initialisieren
  2. Zwei Zeiger auf Integer deklarieren: start_ptr und end_ptr
  3. start_ptr so setzen, dass er auf das erste Element des Arrays zeigt
  4. end_ptr mithilfe von Zeigerarithmetik so setzen, dass er auf das letzte Element des Arrays zeigt
  5. Einen Zeiger namens current_ptr deklarieren und ihn so initialisieren, dass er auf das erste Element zeigt
  6. Eine while-Schleife mit einem Zeigervergleich (current_ptr <= end_ptr) verwenden, um das Array zu durchlaufen
  7. Innerhalb der Schleife:
    • Prüfen, ob der aktuelle Wert zwischen 60 und 90 liegt (einschließlich)
    • Wenn der Wert im Bereich liegt, „Wert [value] liegt im Bereich“ ausgeben
    • Wenn der Wert nicht im Bereich liegt, „Wert [value] liegt außerhalb des Bereichs“ ausgeben
    • current_ptr erhöhen, um zum nächsten Element zu wechseln
  8. Nach der Schleife mithilfe eines Zeigervergleichs überprüfen, ob current_ptr nun über das Ende des Arrays hinaus zeigt, indem geprüft wird, ob current_ptr > end_ptr gilt
  9. Wenn die Bedingung wahr ist, „Durchlauf abgeschlossen“ ausgeben

Deine Ausgabe sollte im folgenden Format erscheinen:

Value 45 is out of range
Value 78 is in range
Value 92 is out of range
Value 63 is in range
Value 87 is in range
Value 34 is out of range
Value 91 is out of range
Value 56 is out of range
Traversal complete

Diese Herausforderung testet dein Verständnis von Zeigervergleichsoperatoren in Schleifenbedingungen, der Verwendung von Zeigerarithmetik zum Festlegen von Grenzzeigern und der Frage, wie Zeigervergleiche die Array-Durchquerung eleganter steuern können als herkömmliche zählerbasierte Schleifen.

Probier es selbst

#include <stdio.h>

int main() {
    // TODO: Schreibe deinen Code unten
    
    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