Arrays variabler Länge in C trotz konstanter Array-Grenze-Anforderung
In C wird angegeben, dass die Array-Grenze ein konstanter Ausdruck sein muss. In bestimmten Codeszenarien scheint es jedoch so zu sein, dass gegen diese Regel verstoßen wird, ohne dass es zu Fehlern kommt. Betrachten Sie das folgende Beispiel:
#include <iostream> using namespace std; int main(){ int n=10; int a[n]; for (int i=0; i<n; i++) { a[i]=i+1; cout<<a[i]<<endl; } return 0; }
Laut Lehrbüchern sollte dieser Code einen Fehler auslösen, da n kein konstanter Ausdruck ist. Überraschenderweise läuft es in Xcode4 unter Mac einwandfrei. Was erklärt diesen scheinbaren Widerspruch?
Die Antwort liegt in einer C99-Funktion namens Variable Length Arrays (VLAs). Obwohl sie hauptsächlich in C verwendet werden, unterstützen bestimmte Compiler VLAs auch in C. In diesem Zusammenhang ist int a[n] ein VLA, das ähnlich wie int a[10] Platz auf dem Stapel zuweist.
Daher verwendet der obige Code ein VLA mit einer variablen Länge n. Diese Funktion ermöglicht die Erstellung von Arrays mit dynamisch bestimmten Größen, auch wenn die Array-Grenze technisch gesehen kein konstanter Ausdruck ist.
Das obige ist der detaillierte Inhalt vonWarum funktionieren Arrays variabler Länge in diesem C-Code trotz der Regel zur konstanten Array-Begrenzung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!