Variable Length ArrayEin Variable Length Array (VLA) ist ein Datentyp der Programmiersprache C. Es handelt sich um ein Feld (englisch Array), dessen Größe erst zur Laufzeit, d. h. variabel, festgelegt wird. Funktionsweise und AnwendungIm Gegensatz zum klassischen Vektor, dessen Größe zum Zeitpunkt der Übersetzung festgelegt wird,[1] führt der C99-Standard das Konzept variabler Array-Größen ein. Bei der Definition eines Feldes kann dessen Größe durch einen beliebigen ganzzahligen Ausdruck bestimmt werden.
void foo(unsigned int len) {
int vector[3] = { 14, 4, 7 }; /* initialisiertes Feld fixer Größe */
int vla[len]; /* VLA entsprechend dem Parameter len */
...
}
Dabei ist zu beachten, dass VLAs nicht initialisiert werden können (Einschränkung in den C-Standards, vgl. §6.7.8 respektive §6.7.9)[2][3] und die Größe nur einmalig bei der Definition festgelegt werden kann. Darüber hinaus können VLAs nur innerhalb von Funktionen angelegt werden. Außerhalb von Funktionen müssen Feldgrößen auch in C99 zum Zeitpunkt der Übersetzung bekannt sein. Der Gültigkeitsbereich eines VLAs beginnt wie bei allen lokalen Variablen mit dessen Definition und umfasst den umschließenden Block.
Ein großer Vorteil von VLAs ist, dass für temporäre Felder der Aufruf von BeispielDas folgende Beispiel zeigt eine typische Anwendung von VLAs.
#include <stdio.h>
#include <string.h>
char* reverse_string(char* in_out){
unsigned int len = strlen(in_out);
char tmp[len + 1]; // VLA für String und Nullterminierung
strcpy(tmp, in_out);
for (int i = 0; i < len; i++)
in_out[i] = tmp[len - i - 1];
return in_out;
}
int main(void) {
char tmp[] = "Hallo";
printf("%s\n", reverse_string(tmp));
return 0;
}
Die Funktion AuswirkungenDer Operator Abgrenzung zu anderen ProgrammiersprachenVLAs sind C-spezifisch und werden nicht vom C++-Standard übernommen. C++ bietet Container-Klassen, die variable Felder ermöglichen. Die Programmiersprachen APL und Perl unterstützen beispielsweise Felder, deren Größe zur Laufzeit verändert werden kann.[5] Arrays in Java haben eine feste Größe. Da sie dynamisch angelegt werden, können wie bei VLAs die Größen zur Laufzeit festgelegt werden. Einzelnachweise
|