Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Eine Einführung in die Programmiersprache C und ... - C /C++ Ecke
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>E<strong>in</strong>e</strong> <strong>E<strong>in</strong>führung</strong> <strong>in</strong> <strong>die</strong> Informatik <strong>und</strong> <strong>die</strong> <strong>Programmiersprache</strong> C<br />
11.5 [C99] Variable Length Arrays<br />
Seit dem neuen Standard C99 gibt es auch Arrays mit variabler Länge, sogenannte VLA<br />
(Variable Length Array). VLAs können nur <strong>in</strong>nerhalb von Blöcken def<strong>in</strong>iert werden, sie<br />
dürfen weder global, noch statisch se<strong>in</strong>, auch dürfen sie nicht <strong>in</strong>nerhalb von Strukturen def<strong>in</strong>iert<br />
werden. VLAs können zudem als Argumente an Funktionen übergeben werden.<br />
VLAs können wie gewöhnliche Arrays beliebig viele Dimensionen be<strong>in</strong>halten. Die Grösse<br />
des Arrays bleibt während se<strong>in</strong>er Lebensdauer konstant, sie wird beim Erzeugen des Arrays<br />
festgelegt.<br />
Def<strong>in</strong>ition e<strong>in</strong>es VLA:<br />
<strong>in</strong>t f(<strong>in</strong>t n) {<br />
double Flexibel[n]; /* Bei jeden Aufruf der Funktion f kann das */<br />
/* Array e<strong>in</strong>e andere Grösse haben, aber */<br />
/* während e<strong>in</strong>em Funktionsdurchlauf bleibt */<br />
/* <strong>die</strong> Grösse konstant */<br />
}<br />
VLAs können selbstverständlich auch mehrdimensional se<strong>in</strong>.<br />
Wenn VLAs als Argumente an Funktionen übergeben werden, muss <strong>die</strong> Grösse des Arrays<br />
separat als weiteres Argument übergeben werden. Dabei muss <strong>die</strong> Grösse <strong>in</strong> der Parameterliste<br />
vor dem Array stehen. Bei mehrdimensionalen Arrays müssen entsprechend auch alle<br />
Grössen übergeben werden:<br />
<strong>in</strong>t f(<strong>in</strong>t n, <strong>in</strong>t m, <strong>in</strong>t Feld[n][m]) {<br />
/* Bei jeden Aufruf der Funktion f kann das Array e<strong>in</strong>e andere */<br />
/* Grösse haben, aber während e<strong>in</strong>em Funktionsdurchlauf bleibt */<br />
/* <strong>die</strong> Grösse konstant */<br />
}<br />
11.6 [C99] Direkte Initialisierer<br />
In C99 können <strong>in</strong> der Initialisiererliste Arrayelemente direkt <strong>in</strong>itialisiert werden, dazu muss<br />
das entsprechende Element mit e<strong>in</strong>em Index angegeben werden:<br />
<strong>in</strong>t Vektor[10] = {1, 2, [4] = 6, 5, [9] = 1};<br />
/*ergibt 1 2 0 0 6 5 0 0 0 1 */<br />
<strong>in</strong>t Matrix[3][3] = {[0][0] = 1, [1][1] = 1, [2][2] = 1};<br />
/*ergibt 1 0 0<br />
0 1 0<br />
0 0 1 */<br />
Nach e<strong>in</strong>er expliziten Zuweisung wird mit den nachfolgenden Initialisiererwerten an <strong>die</strong>ser<br />
Stelle weitergefahren. Es können auch bereits <strong>in</strong>itialisierte Werte wieder überschrieben<br />
werden, auch wenn das nicht besonders s<strong>in</strong>nvoll <strong>und</strong> verständlich ist:<br />
<strong>in</strong>t Vektor[10] = {1, 2, 3, 4, 5, 6, 7, 8, [4] = 9, 8, 7, 6, 5, 4};<br />
/* Initialisiert den Vektor auf folgenden Inhalt: 1 2 3 4 9 8 7 6 5 4 */<br />
Gedruckt am 11.09.2008 13:04:00 Letzte Änderung am: 11. September 2008 Version 2.4, I. Oesch 45/147