C-Array als konstanter Ausdruck gebunden: Ausnahme im Code
In C muss ein gebundenes Array normalerweise ein konstanter Ausdruck sein, um dies sicherzustellen Die Größe des Arrays ist beim Kompilieren bekannt. In bestimmten Fällen scheint jedoch gegen diese Regel verstoßen zu werden. Sehen wir uns ein konkretes Beispiel an:
#include <iostream> using namespace std; int main() { int n = 10; int a[n]; // Array a with size n for (int i = 0; i < n; i++) { a[i] = i + 1; cout << a[i] << endl; } return 0; }
Dieser Code wird fehlerfrei ausgeführt, wenn er mit Xcode4 auf dem Mac kompiliert wird. Trotz der Tatsache, dass die Größe des Arrays a kein konstanter Ausdruck ist, funktioniert der Code.
Erklärung: Arrays mit variabler Länge (VLA)
Der Grund dafür Dass der Code funktioniert, ist auf eine Funktion namens Variable-Length Arrays (VLA) zurückzuführen, die in C99 eingeführt wurde. VLAs ermöglichen die Bestimmung der Größe eines Arrays zur Laufzeit, im Gegensatz zu regulären Arrays, deren Größe zur Kompilierungszeit bekannt sein muss.
Im bereitgestellten Code ist n kein konstanter Ausdruck, sondern eine Variable. Da der Compiler in
Es ist wichtig zu beachten, dass VLAs ähnlich wie statische Arrays auf dem Stapel zugewiesen werden. Dies bedeutet, dass der Speicher für das Array automatisch zugewiesen und freigegeben wird, wenn das Programm die Funktion, in der die VLA deklariert ist, aufruft und verlässt. Dieses Verhalten unterscheidet sich von regulären Arrays, die auf dem Heap zugewiesen sind und manuell mithilfe von Zeigern verwaltet werden müssen.Das obige ist der detaillierte Inhalt vonWarum wird dieser C-Code trotz einer nicht konstanten Array-Grenze kompiliert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!