Menu
Coddy logo textTech

Array-Namen als Pointer

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

Arrays und Pointer in C haben eine besondere Beziehung, die grundlegend für das Verständnis dafür ist, wie C mit Daten im Speicher arbeitet. Wenn Sie ein Array deklarieren, fungiert der Array-Name selbst als ein konstanter Pointer auf das erste Element des Arrays.

Das bedeutet: Wenn Sie ein Array wie int numbers[5]; haben, ist der Name numbers im Wesentlichen ein Pointer, der immer auf numbers[0] zeigt. Sie können sich den Array-Namen als einen integrierten Pointer vorstellen, den Sie nicht separat deklarieren müssen.

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' zeigt auf das erste Element
// numbers == &numbers[0]  // Diese sind äquivalent!

Diese Äquivalenz ist entscheidend: numbers und &numbers[0] geben Ihnen beide genau dieselbe Speicheradresse. Der Array-Name ist lediglich eine bequemere Art, auf die Adresse des ersten Elements zu verweisen, ohne den Adressoperator verwenden zu müssen.

Das Verständnis dieser Beziehung öffnet die Tür zur Verwendung von Pointer-Techniken bei Arrays, was Ihren Code flexibler und effizienter machen kann. Der Hauptunterschied besteht darin, dass Array-Namen im Gegensatz zu regulären Pointern konstante Pointer sind – Sie können nicht ändern, worauf sie zeigen.

challenge icon

Aufgabe

Einfach

Schreiben Sie ein C-Programm, das die Äquivalenz zwischen Array-Namen und Zeigern auf ihr erstes Element demonstriert. Ihr Programm sollte:

  1. Ein Integer-Array namens numbers mit 4 Elementen deklarieren und es mit den Werten {10, 20, 30, 40} initialisieren
  2. Einen Zeiger auf einen Integer namens ptr deklarieren
  3. Den Array-Namen numbers dem Zeiger ptr zuweisen
  4. Die in numbers gespeicherte Adresse mit printf und dem Formatbezeichner %p ausgeben
  5. Die Adresse des ersten Elements &numbers[0] mit printf und dem Formatbezeichner %p ausgeben
  6. Die in ptr gespeicherte Adresse mit printf und dem Formatbezeichner %p ausgeben
  7. Den Wert des ersten Elements über den Array-Namen ausgeben: *numbers
  8. Den Wert des ersten Elements über den Zeiger ausgeben: *ptr

Ihre Ausgabe sollte die Ergebnisse im folgenden Format anzeigen:

Array name address: [address]
First element address: [address]
Pointer address: [address]
Value via array name: 10
Value via pointer: 10

Diese Herausforderung zeigt, dass der Array-Name als konstanter Zeiger auf das erste Element fungiert und dass numbers, &numbers[0] und ptr alle dieselbe Speicheradresse enthalten, wenn ptr der Array-Name zugewiesen wird.

Spickzettel

Array-Namen in C fungieren als konstante Zeiger auf das erste Element des Arrays.

Wenn Sie ein Array deklarieren, zeigt der Array-Name auf das erste Element:

int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' zeigt auf das erste Element
// numbers == &numbers[0]  // Diese sind äquivalent!

Sie können einen Array-Namen einem Zeiger zuweisen:

int *ptr;
ptr = numbers;  // ptr zeigt nun auf das erste Element

Greifen Sie mit der Zeigerschreibweise auf Werte zu:

*numbers  // Wert des ersten Elements über den Array-Namen
*ptr      // Wert des ersten Elements über den Zeiger

Hauptunterschied: Array-Namen sind konstante Zeiger – im Gegensatz zu regulären Zeigern können Sie nicht ändern, worauf sie zeigen.

Probier es selbst

#include <stdio.h>

int main() {
    // TODO: Schreiben Sie Ihren Code hier
    // 1. Deklarieren und initialisieren Sie das Array 'numbers' mit {10, 20, 30, 40}
    // 2. Deklarieren Sie einen Zeiger auf einen Integer namens 'ptr'
    // 3. Weisen Sie den Array-Namen dem Zeiger zu
    // 4. Geben Sie alle erforderlichen Adressen und Werte 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