Looking for c Keywords? Try Ask4Keywords

C LanguageArrays


Einführung

Arrays sind abgeleitete Datentypen, die eine geordnete Sammlung von Werten ("Elementen") eines anderen Typs darstellen. Die meisten Arrays in C haben eine feste Anzahl von Elementen eines beliebigen Typs und ihre Darstellung speichert die Elemente zusammenhängend im Speicher ohne Lücken oder Auffüllen. C erlaubt mehrdimensionale Arrays, deren Elemente andere Arrays sind, sowie Arrays von Zeigern.

C unterstützt dynamisch zugewiesene Arrays, deren Größe zur Laufzeit bestimmt wird. C99 und höher unterstützt Arrays mit variabler Länge oder VLAs.

Syntax

  • Typname [Länge]; / * Definiere ein Array von 'type' mit Namen 'name' und length 'length'. * /
  • int arr [10] = {0}; / * Definiere ein Array und initialisiere ALLE Elemente auf 0. * /
  • int arr [10] = {42}; / * Definiere ein Array und initialisiere die ersten Elemente auf 42 und den Rest auf 0. * /
  • int arr [] = {4, 2, 3, 1}; / * Definiere und initialisiere ein Array der Länge 4. * /
  • arr [n] = Wert; / * Wert an Index n setzen. * /
  • Wert = arr [n]; / * Wert an Index n abrufen. * /

Bemerkungen

Warum brauchen wir Arrays?

Arrays bieten eine Möglichkeit, Objekte zu einem Aggregat mit eigener Bedeutung zu organisieren. Zum Beispiel C - Strings sind Arrays von Zeichen ( char s) und eine Zeichenkette wie „Hallo, Welt!“ hat eine Bedeutung als Aggregat, das den Zeichen nicht individuell inhärent ist. In ähnlicher Weise werden Arrays üblicherweise verwendet, um mathematische Vektoren und Matrizen sowie Listen vieler Arten darzustellen. Ohne die Elemente gruppieren zu können, müsste man jedes einzeln ansprechen, z. B. über separate Variablen. Das ist nicht nur unhandlich, es kann nicht einfach Sammlungen unterschiedlicher Längen aufnehmen.

Arrays werden in den meisten Kontexten implizit in Zeiger konvertiert .

Außer , wenn als Operand der erscheinen sizeof - Operators, der _Alignof Operator (C2011) oder die unären & (Adresse-of) Operator oder als Stringliteral verwendet , um einen (anderen) Array zu initialisieren, wird ein Array implizit umgewandelt in ( "decays to") einen Zeiger auf sein erstes Element. Diese implizite Konvertierung ist eng an die Definition des Array-Subskriptionsoperators ( [] ) gekoppelt: Der Ausdruck arr[idx] ist als äquivalent zu *(arr + idx) . Da die Zeigerarithmetik kommutativ ist, ist *(arr + idx) auch äquivalent zu *(idx + arr) , was wiederum idx[arr] . Alle diese Ausdrücke sind gültig und werden mit demselben Wert ausgewertet, vorausgesetzt, entweder idx oder arr ist ein Zeiger (oder ein Array, das in einen Zeiger zerfällt), der andere ist eine Ganzzahl und die Ganzzahl ist ein gültiger Index für das Array auf den der Zeiger zeigt.

Beachten Sie als Sonderfall, dass &(arr[0]) äquivalent zu &*(arr + 0) , was die Vereinfachung von arr vereinfacht. Alle diese Ausdrücke sind überall dort austauschbar, wo der letzte zu einem Zeiger zerfällt. Dies drückt einfach wieder aus, dass ein Array zu einem Zeiger auf sein erstes Element zerfällt.

Im Gegensatz dazu hat das Ergebnis den Typ T (*)[N] und zeigt auf das gesamte Array, wenn der Address-of-Operator auf ein Array vom Typ T[N] angewendet wird ( dh &arr ). Dies unterscheidet sich von einem Zeiger auf das erste Array-Element zumindest in Bezug auf die Zeigerarithmetik, die in Bezug auf die Größe des Zeigetyps definiert ist.

Funktionsparameter sind keine Arrays .

void foo(int a[], int n);
void foo(int *a, int n);

Obwohl die erste Deklaration von foo für Parameter a a arrayartige Syntax verwendet, wird mit dieser Syntax ein Funktionsparameter deklariert, der diesen Parameter als Zeiger auf den Elementtyp des Arrays deklariert. Somit ist die zweite Signatur für foo() semantisch identisch mit der ersten. Dies entspricht den Zerfall von Array - Wert auf Zeiger , wo sie als Argument für einen Funktionsaufruf angezeigt wird , so dass , wenn eine Variable , und ein Funktionsparameter mit dem gleichen Array - Typ deklariert werden dann Wert, den Variable zur Verwendung in einem Funktionsaufruf als das geeignet ist , Argument, das dem Parameter zugeordnet ist.

Arrays Verwandte Beispiele