Die Angabe der Arraygröße muß keine literale Konstante sein, es kann auch ein anderer konstanter Wert oder Ausdruck eingesetzt werden. Konstant heißt hier insbesondere, daß der Wert zur Übersetzungszeit bekannt sein muß. Die auftretenden Fälle mache man sich am besten an den folgenden Beispielen klar:
#define Konstante 4 // Zur Benutzung von #defineconst int auchKonstant = 5; int nichtkonstant = 7; int a[3]; // Das geht natuerlich klar int b[Konstante]; // Kein Problem: Nur Textersetzung int c[auchKonstant]; // geht auch klar int d[auchKonstant + 4]; // Compiler kann dies auswerten int e[nichtkonstant]; // Fehler! Kein konstanter Ausdruck
Außer der elementweisen Zuweisung von Arrayelementen und der kompakten Initialisierung sind keine Zuweisungen an Arrays erlaubt. Insbesondere kann ein Array einem anderen nicht zugewiesen werden. Auch nicht als Initialisierung:
int x[3] = { 1, 2, 3}; int y[3] = x; // Fehler int z[3]; z = x;