Menu
Coddy logo textTech

Array-Elemente - Pointer

Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 8 von 63.

Da Sie nun verstehen, wie Array-Namen als Pointer funktionieren, können Sie dieses Wissen nutzen, um auf Array-Elemente auf eine völlig andere Weise zuzugreifen. Anstatt die vertraute Klammerschreibweise wie array[i] zu verwenden, können Sie die Pointer-Notation verwenden, um das gleiche Ergebnis zu erzielen.

Die entscheidende Erkenntnis ist, dass array[i] exakt äquivalent zu *(array + i) ist. Wenn Sie array + i schreiben, weisen Sie C an, i Positionen vom Anfang des Arrays nach vorne zu rücken. Der Dereferenzierungsoperator * ruft dann den Wert an dieser Stelle ab.

int numbers[5] = {10, 20, 30, 40, 50};
// Diese beiden Zeilen machen genau das Gleiche:
printf("%d", numbers[2]);    // Gibt 30 aus
printf("%d", *(numbers + 2)); // Gibt ebenfalls 30 aus

Diese Zeigernotation funktioniert, weil C die korrekte Speicheradresse automatisch basierend auf der Datentypgröße berechnet. Wenn Sie 2 zu einem Integer-Array-Zeiger hinzufügen, rückt C um 2 × sizeof(int) Bytes vor und landet genau beim dritten Element.

Das Verständnis dieser Äquivalenz gibt Ihnen Flexibilität bei der Arbeit mit Arrays und bereitet Sie auf fortgeschrittenere Pointer-Techniken vor, denen Sie im weiteren Verlauf des Erlernens von C begegnen werden.

challenge icon

Aufgabe

Einfach

Schreiben Sie ein C-Programm, das den Zugriff auf Array-Elemente unter Verwendung der Zeigernotation anstelle der herkömmlichen Array-Indizierung demonstriert. Ihr Programm sollte:

  1. Deklarieren Sie ein Integer-Array namens values mit 6 Elementen und initialisieren Sie es mit den Werten {5, 15, 25, 35, 45, 55}
  2. Verwenden Sie eine for-Schleife, um alle Elemente des Arrays zu durchlaufen
  3. Verwenden Sie innerhalb der Schleife die Zeigernotation *(values + i), um auf jedes Element zuzugreifen (verwenden Sie keine Klammernotation wie values[i])
  4. Geben Sie jedes Element unter Verwendung der Zugriffsmethode per Zeigernotation aus
  5. Demonstrieren Sie nach der Schleife die Äquivalenz, indem Sie das dritte Element (Index 2) mit beiden Methoden ausgeben:
    • Zuerst unter Verwendung der Zeigernotation: *(values + 2)
    • Dann unter Verwendung der herkömmlichen Array-Notation: values[2]

Ihre Ausgabe sollte die Ergebnisse im folgenden Format anzeigen:

Element 0: 5
Element 1: 15
Element 2: 25
Element 3: 35
Element 4: 45
Element 5: 55
Third element via pointer: 25
Third element via array: 25

Diese Herausforderung testet Ihr Verständnis der Äquivalenz zwischen array[i] und *(array + i) und demonstriert, wie die Zeigerarithmetik es Ihnen ermöglicht, auf Array-Elemente über Speicheradressberechnungen anstelle der herkömmlichen Indizierung zuzugreifen.

Spickzettel

Array-Elemente können mit der Zeigerschreibweise anstelle der Klammerschreibweise aufgerufen werden. Der Ausdruck array[i] ist äquivalent zu *(array + i).

Wenn Sie array + i schreiben, bewegt sich C um i Positionen vom Anfang des Arrays vorwärts. Der Dereferenzierungsoperator * ruft den Wert an dieser Stelle ab.

int numbers[5] = {10, 20, 30, 40, 50};
// Diese beiden Zeilen machen genau das Gleiche:
printf("%d", numbers[2]);    // Gibt 30 aus
printf("%d", *(numbers + 2)); // Gibt ebenfalls 30 aus

C berechnet automatisch die korrekte Speicheradresse basierend auf der Größe des Datentyps. Das Hinzufügen von 2 zu einem Integer-Array-Zeiger bewegt sich um 2 × sizeof(int) Bytes vorwärts.

Probier es selbst

#include <stdio.h>

int main() {
    // TODO: Schreiben Sie hier Ihren Code
    // Deklarieren und initialisieren Sie das Array 'values' mit 6 Elementen
    // Verwenden Sie eine for-Schleife, um jedes Element mit der Zeigernotation *(values + i) auszugeben
    // Geben Sie nach der Schleife das dritte Element sowohl in Zeiger- als auch in Array-Notation aus
    
    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 Logic & Flow