Array-Namen als Pointer
Teil des Abschnitts Logik & Ablauf der C-Journey von Coddy. Lektion 7 von 63.
Arrays und Zeiger in C stehen in einer besonderen Beziehung, die grundlegend dafür ist, zu verstehen, wie C mit Daten im Speicher arbeitet. Wenn du ein Array deklarierst, fungiert der Arrayname selbst als konstanter Zeiger auf das erste Element des Arrays.
Das bedeutet, dass der Name numbers, wenn du ein int numbers[5];-Array hast, im Wesentlichen ein pointer ist, der immer auf numbers[0] zeigt. Du kannst dir den Array-Namen als einen integrierten pointer vorstellen, den du nicht separat deklarieren musst.
int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' points to the first element
// numbers == &numbers[0] // Diese sind äquivalent!Diese Gleichwertigkeit ist entscheidend: numbers und &numbers[0] liefern dir beide exakt dieselbe Speicheradresse. Der Arrayname ist einfach eine bequemere Möglichkeit, auf die Adresse des ersten Elements zu verweisen, ohne den Adressoperator verwenden zu müssen.
Das Verständnis dieser Beziehung eröffnet den Zugang zur Verwendung von Zeigertechniken mit Arrays, wodurch dein Code flexibler und effizienter werden kann. Der entscheidende Unterschied besteht darin, dass Array-Namen im Gegensatz zu gewöhnlichen Zeigern konstante Zeiger sind – du kannst nicht ändern, worauf sie zeigen.
Aufgabe
EinfachSchreibe ein C-Programm, das die Gleichwertigkeit zwischen Array-Namen und Zeigern auf ihre ersten Elemente demonstriert. Dein Programm sollte:
- Ein Integer-Array namens
numbersmit 4 Elementen deklarieren und es mit den Werten {10, 20, 30, 40} initialisieren - Einen Zeiger auf einen Integer namens
ptrdeklarieren - Den Array-Namen
numbersdem Zeigerptrzuweisen - Die in
numbersgespeicherte Adresse mitprintfund dem Formatspezifizierer%pausgeben - Die Adresse des ersten Elements
&numbers[0]mitprintfund dem Formatspezifizierer%pausgeben - Die in
ptrgespeicherte Adresse mitprintfund dem Formatspezifizierer%pausgeben - Den Wert des ersten Elements mithilfe des Array-Namens ausgeben:
*numbers - Den Wert des ersten Elements mithilfe des Zeigers ausgeben:
*ptr
Deine 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: 10Diese Aufgabe demonstriert, dass der Array-Name als konstanter Zeiger auf das erste Element fungiert und dass numbers, &numbers[0] und ptr dieselbe Speicheradresse enthalten, wenn ptr der Array-Name zugewiesen wird.
Probier es selbst
#include <stdio.h>
int main() {
// TODO: Schreibe deinen Code hier
// 1. Deklariere und initialisiere das Array 'numbers' mit {10, 20, 30, 40}
// 2. Deklariere einen Zeiger auf Integer namens 'ptr'
// 3. Weise dem Zeiger den Array-Namen zu
// 4. Gib alle erforderlichen Adressen und Werte aus
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