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 ist, wie C mit Daten im Speicher arbeitet. Wenn Sie ein Array deklarieren, fungiert der Array-Name selbst als konstanter Pointer auf das erste Element des Arrays.
Das bedeutet, dass wenn Sie ein Array wie int numbers[5]; haben, der Name numbers im Grunde ein Pointer ist, der immer auf numbers[0] points. Sie können sich den Namen des Arrays wie einen eingebauten Pointer vorstellen, den Sie nicht separat Declare müssen.
int numbers[5] = {10, 20, 30, 40, 50};
// 'numbers' points to the first element
// numbers == &numbers[0] // Diese sind äquivalent!Diese Äquivalenz ist entscheidend: numbers und &numbers[0] liefern Ihnen beide genau dieselbe Speicheradresse. Der Array-Name ist einfach eine bequemere Möglichkeit, auf die Adresse des ersten Elements zu verweisen, ohne den Adresse-von-Operator verwenden zu müssen.
Das Verständnis dieser Beziehung öffnet die Tür zur Verwendung von Pointer-Techniken mit Arrays, was Ihren Code flexibler und effizienter machen kann. Der Hauptunterschied besteht darin, dass Array-Namen im Gegensatz zu normalen Pointern konstante Pointer sind - Sie können nicht ändern, worauf sie zeigen.
Aufgabe
EinfachSchreiben Sie ein C-Programm, das die Äquivalenz zwischen Array-Namen und Pointern auf ihr erstes Element demonstriert. Ihr Programm sollte:
- Ein Integer-Array namens
numbersmit 4 Elementen deklarieren und es mit den Werten {10, 20, 30, 40} initialisieren - Einen Pointer auf einen Integer namens
ptrdeklarieren - Den Array-Namen
numbersdem Pointerptrzuweisen - Die in
numbersgespeicherte Adresse mittelsprintfmit dem Formatspezifizierer%pausgeben - Die Adresse des ersten Elements
&numbers[0]mittelsprintfmit dem Formatspezifizierer%pausgeben - Die in
ptrgespeicherte Adresse mittelsprintfmit dem Formatspezifizierer%pausgeben - Den Wert des ersten Elements unter Verwendung des Array-Namens ausgeben:
*numbers - Den Wert des ersten Elements unter Verwendung des Pointers 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: 10Diese Aufgabe zeigt, dass der Array-Name als konstanter Pointer auf das erste Element fungiert und dass numbers, &numbers[0] und ptr alle 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 den Array-Namen dem Zeiger 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 Logic & Flow
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