21.11.2013 Aufrufe

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

Eine Einführung in die Programmiersprache C und die Grundlagen ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<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 10.09.2009 14:23:00 Letzte Änderung am: 10. September 2009 Version 2.4.1, I. Oesch 45/147

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!