Es ist wichtig, klare Definitionen der Begriffe zu haben. Leider scheint es mehrere Definitionen dafür zu geben, was statische und dynamische Arrays bedeuten.
Statische Variablen sind Variablen, die mithilfe der statischen Speicherzuordnung definiert werden . Dies ist ein allgemeines Konzept, das von C / C ++ unabhängig ist. In C / C ++ können wir statische Variablen mit globalem, Datei- oder lokalem Bereich wie folgt erstellen:
int x[10]; //static array with global scope
static int y[10]; //static array with file scope
foo() {
static int z[10]; //static array with local scope
Automatische Variablen werden normalerweise mithilfe einer stapelbasierten Speicherzuordnung implementiert . Ein automatisches Array kann in C / C ++ folgendermaßen erstellt werden:
foo() {
int w[10]; //automatic array
Was diese Arrays x, y, z
, undw
gemeinsam haben , ist , dass die Größe für jeden von ihnen befestigt ist und während der Kompilierung definiert.
Einer der Gründe, warum es wichtig ist, die Unterscheidung zwischen einem automatischen Array und einem statischen Array zu verstehen, besteht darin, dass statischer Speicher normalerweise im Datenabschnitt (oder BSS-Abschnitt ) einer Objektdatei implementiert ist und der Compiler absolute Adressen verwenden kann, um auf die Arrays zuzugreifen Dies ist mit stapelbasiertem Speicher nicht möglich.
Was normalerweise mit einem dynamischen Array gemeint ist, ist nicht eines, dessen Größe geändert werden kann, sondern eines, das mithilfe einer dynamischen Speicherzuordnung mit einer zur Laufzeit festgelegten festen Größe implementiert wird. In C ++ erfolgt dies mit dem new
Operator .
foo() {
int *d = new int[n]; //dynamically allocated array with size n
Es ist jedoch möglich, ein automatisches Array mit einer zur Laufzeit definierten Fixgröße zu erstellen, indem alloca
:
foo() {
int *s = (int*)alloca(n*sizeof(int))
Für ein echtes dynamisches Array sollte man so etwas wie std::vector
in C ++ verwenden (oder ein Array mit variabler Länge in C ).
Was war für die Aufgabe in der Frage des OP gedacht? Ich denke, es ist klar, dass nicht ein statisches oder automatisches Array gewünscht wurde, sondern eines, das entweder die dynamische Speicherzuweisung mit dem new
Operator oder ein Array mit nicht fester Größe unter Verwendung von z std::vector
.