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.

116 6. Po<strong>in</strong>ter und References<br />

auf die e<strong>in</strong> Po<strong>in</strong>ter zeigt, regulär reserviert ist! Es gibt nicht e<strong>in</strong>mal<br />

die Möglichkeit, zur Laufzeit herauszuf<strong>in</strong>den, ob e<strong>in</strong> Po<strong>in</strong>ter<br />

überhaupt auf e<strong>in</strong>e reguläre Adresse zeigt!<br />

Vorsicht Falle: Schlamperei beim Entwickeln und daraus resultierende<br />

Po<strong>in</strong>ter, die entweder auf Speicherstellen zeigen, auf die sie nicht zeigen sollen<br />

oder auch Fehl<strong>in</strong>terpretationen von Datentypen, gehören zu den schlimmsten<br />

Fehlern, die man machen kann. Schlimm s<strong>in</strong>d diese Fehler aus zwei Gründen:<br />

Erstens, weil sie sich nur allzu oft nicht sofort bemerkbar machen. Zweitens,<br />

weil im Normalfall ke<strong>in</strong> direkter Zusammenhang zwischen Ursache und Wirkung<br />

erkennbar ist. Gerade Typ-Fehl<strong>in</strong>terpretationen s<strong>in</strong>d außerordentlich<br />

schwer <strong>in</strong> e<strong>in</strong>em fehlerhaften Programm zu lokalisieren.<br />

Als erstes Beispiel zum Thema Po<strong>in</strong>ter versuchen wir e<strong>in</strong>mal, den Mechanismus<br />

der References, den wir bereits kennen gelernt haben, quasi “zu Fuß”<br />

zu implementieren. In C wäre diese Art der Implementation sogar notwendig,<br />

denn C kennt ke<strong>in</strong>e References (first_po<strong>in</strong>ter_demo.cpp):<br />

1 // f i r s t p o i n t e r d e m o . cpp − small demo o f p o i n t e r s <strong>in</strong> <strong>C++</strong><br />

2<br />

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

4 #<strong>in</strong>clude ” u s e r t y p e s . h”<br />

5<br />

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

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

8<br />

9 void changeVariable ( <strong>in</strong>t32 ∗ var ) ;<br />

10<br />

11 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−<br />

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

13 {<br />

14 <strong>in</strong>t32 my var = 12;<br />

15 <strong>in</strong>t32 ∗ my ptr = &my var ;<br />

16<br />

17 // my var and my ptr r e f e r to the same <strong>in</strong>t32 <strong>in</strong> memory<br />

18 // t h e r e f o r e they share the same value . . .<br />

19 cout

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!