Share via


Arraydeklarationen

Eine "Arraydeklaration" benennt das Array und gibt den Typ der Elemente an. Hiermit kann auch die Anzahl von Elementen im Array definiert werden. Eine Variable mit Arraytyp wird als Zeiger auf den Typ der Arrayelemente betrachtet.

Syntax

declaration:
declaration-specifiersinit-declarator-listopt;

init-declarator-list:
init-declarator
init-declarator-list , init-declarator

init-declarator:
declarator
declarator = initializer

declarator:
pointeroptdirect-declarator

direct-declarator:
direct-declarator[constant-expressionopt]

Da constant-expression optional ist, hat die Syntax zwei Formen:

  • Die erste Form definiert eine Arrayvariable. Das constant-expression-Argument innerhalb der Klammern gibt die Anzahl von Elementen im Array an. constant-expression, falls vorhanden, muss einen ganzzahligen Typ und einen Wert aufweisen, der größer als null ist. Jedes Element weist den Typ auf, der durch type-specifier angegeben wird. Dies kann ein beliebiger Typ außer void sein. Ein Arrayelement darf kein Funktionstyp sein.

  • Die zweite Form deklariert eine Variable, die an einer anderen Stelle definiert wurde. Sie lässt das constant-expression-Argument in Klammern weg, aber nicht die Klammern. Sie können diese Form nur dann verwenden, wenn Sie das Array zuvor initialisiert und als Parameter oder als Verweis auf ein Array deklariert haben, das explizit an anderer Stelle im Programm definiert ist.

Bei beiden Formen vergibt direct-declarator den Namen der Variable und kann den Typ der Variable ändern. Die Klammern ( [ ] ) nach direct-declarator ändern den Deklarator in einen Arraytyp.

Typqualifizierer können in der Deklaration eines Objekts des Arraytyps enthalten sein, die Qualifizierer gelten jedoch für die Elemente und nicht für das Array selbst.

Sie können ein Array von Arrays (ein "mehrdimensionales" Array) deklarieren, indem Sie der Arraydeklaration eine Liste konstanter Ausdrücke in Klammern in dieser Form nachstellen:

type-specifierdeclarator[constant-expression][constant-expression] ...

Jeder constant-expression in Klammern definiert die Anzahl von Elementen in der angegebenen Dimension: zweidimensionale Arrays haben zwei Ausdrücke in Klammern, dreidimensionale Arrays haben drei usw. Sie können den ersten konstanten Ausdruck weglassen, wenn Sie das Array initialisiert und es als Parameter oder als Verweis auf ein Array deklariert haben, das explizit an anderer Stelle im Programm definiert ist.

Sie können Arrays von Zeigern auf verschiedene Objekttypen definieren, indem Sie komplexe Deklaratoren verwenden, wie unter Interpretieren von komplexeren Deklaratoren beschrieben.

Arrays werden zeilenweise gespeichert. Zum Beispiel besteht das nächste Array aus zwei Zeilen mit jeweils drei Spalten:

char A[2][3];

Die drei Spalten der ersten Zeile werden zuerst gespeichert, danach folgen die drei Spalten der zweiten Zeile. Dies bedeutet, dass sich das letzte Subscript am schnellsten unterscheidet.

Um auf ein einzelnes Element eines Arrays zu verweisen, verwenden Sie einen Subscriptausdruck, wie unter Postfix-Operatoren beschrieben.

Beispiele

Diese Beispiele veranschaulichen Arraydeklarationen:

float matrix[10][15];

Das zweidimensionale Array namens matrix enthält 150 Elemente, von denen jedes den Typ float aufweist.

struct {
    float x, y;
} complex[100];

Dieses Beispiel ist eine Deklaration eines Arrays von Strukturen. Dieses Array weist 100 Elemente auf. Jedes Element ist eine Struktur, die zwei Member enthält.

extern char *name[];

Diese Anweisung deklariert den Typ und den Namen eines Arrays von Zeigern auf char. Die tatsächliche Definition von name ist an anderer Stelle zu finden.

Microsoft-spezifisch

Der Typ einer ganzen Zahl, die zum Speichern der maximalen Größe eines Arrays erforderlich ist, d.h. die Größe von size_t.

Ende Microsoft-spezifisch

Siehe auch

Deklaratoren und Variablendeklarationen