30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

32 2. Datentypen und Variablen<br />

erlaubten Grenzen liegt! Zumeist wird auf e<strong>in</strong>zelne Elemente e<strong>in</strong>es Arrays<br />

auch nicht über konstante Werte zugegriffen, sondern es wird im Programm<br />

e<strong>in</strong> Index ausgerechnet, über den dann zugegriffen wird. Dabei passiert es<br />

z.B. durch typische off-by-one Fehler (=durch Unachtsamkeit alles um 1 verschoben)<br />

nur allzu leicht, dass man e<strong>in</strong>mal danebengreift. Das Programm<br />

quittiert im Glücksfall solche Fehler sofort mit e<strong>in</strong>er entsprechenden Segmentation<br />

Violation oder mit e<strong>in</strong>em Blue-Screen. Hat man Pech, dann stürzt das<br />

Programm nicht ab, weil der Speicher, auf den man irrtümlich zugreift, dem<br />

Programm selbst gehört. Damit überschreibt man unabsichtlich irgendetwas,<br />

was gerade zufällig dort zu liegen kam (z.B. e<strong>in</strong> Element e<strong>in</strong>es anderen<br />

Arrays). Als Folge verfärben ungeahnte seltsame Ergebnisse bei diversen<br />

Testläufen das Gesicht des Entwicklers zuerst <strong>in</strong> e<strong>in</strong> zartes Rosa, das im Lauf<br />

der Zeit <strong>in</strong> e<strong>in</strong> kräftiges Rot umschlägt. Dann setzt die Phase des kalten<br />

Schweißes e<strong>in</strong>, wobei gleichzeitig das Gesicht zu e<strong>in</strong>em leicht grünlichen Weiß<br />

verblasst.<br />

Für die Initialisierung der e<strong>in</strong>zelnen Felder von Array-Variablen gilt dasselbe,<br />

was bereits für Variablen primitiver Datentypen gesagt wurde: globale,<br />

static-auto und Namespace Variablen werden auf die jeweiligen 0-Werte <strong>in</strong>itialisiert.<br />

Legt man also z.B. e<strong>in</strong>e globale Variable an, die e<strong>in</strong> statisches<br />

<strong>in</strong>t-Array repräsentiert, so werden bei Fehlen von expliziter Initialisierung<br />

die e<strong>in</strong>zelnen Elemente auf 0 gesetzt.<br />

Natürlich kann man Arrays, gleich wie <strong>in</strong> C, explizit <strong>in</strong>itialisieren. Dazu<br />

gibt man die Werte zu dessen Initialisierung, getrennt durch Beistriche, <strong>in</strong> e<strong>in</strong>em<br />

Block an (d.h. von geschwungenen Klammern e<strong>in</strong>gefasst). Dies lässt sich<br />

am besten gleich an e<strong>in</strong>em Beispiel zeigen, das das Initialisierungsverhalten<br />

von Arrays demonstriert (array_<strong>in</strong>itializ<strong>in</strong>g_demo.cpp):<br />

1 // a r r a y i n i t i a l i z i n g d e m o . cpp − small program to demonstrate , how<br />

2 // array i n i t i a l i z i n g works <strong>in</strong> <strong>C++</strong><br />

3<br />

4 #<strong>in</strong>clude <br />

5<br />

6 us<strong>in</strong>g std : : cout ;<br />

7 us<strong>in</strong>g std : : endl ;<br />

8<br />

9 // i m p l i c i t l y i n i t i a l i z e d<br />

10 <strong>in</strong>t f i r s t g l o b a l a r r a y [ 5 ] ;<br />

11<br />

12 // e x p l i c i t l y i n i t i a l i z e d<br />

13 <strong>in</strong>t s e c o n d g l o b a l a r r a y [ ] = { 1 , 2 , 3 , 4 , 5 } ;<br />

14<br />

15 // parts of the array e x p l i c i t l y i n i t i a l i z e d<br />

16 // r e s t of i t i m p l i c i t l y i n i t i a l i z e d<br />

17 <strong>in</strong>t t h i r d g l o b a l a r r a y [ 5 ] = { 1 , 2 , 3 } ;<br />

18<br />

19 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

20 <strong>in</strong>t ma<strong>in</strong> ( <strong>in</strong>t argc , char ∗ argv [ ] )<br />

21 {<br />

22 unsigned count ;<br />

23<br />

24 cout

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!