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.

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

C ist schon berühmt und nicht m<strong>in</strong>der berüchtigt für se<strong>in</strong>e Po<strong>in</strong>ter, die e<strong>in</strong><br />

unheimlich mächtiges aber auch gleichzeitig gefährliches Werkzeug darstellen.<br />

C ++ hat nicht nur die Po<strong>in</strong>ter von se<strong>in</strong>er Urmutter C übernommen,<br />

sondern auch den schlechten Ruf, der ihnen anlastet. Ich kann allerd<strong>in</strong>gs nur<br />

immer wieder betonen, dass nicht die Existenz von Po<strong>in</strong>tern das Problem ist,<br />

sondern dass Unwissenheit und Unverständnis sowie Leichts<strong>in</strong>n bei der<br />

Verwendung von Po<strong>in</strong>tern die wahren Schuldigen an deren schlechtem Ruf<br />

s<strong>in</strong>d. Bei Fehlverwendung von Po<strong>in</strong>tern eröffnen sich ungeahnte und besonders<br />

heimtückische Fehlermöglichkeiten! Probleme, die durch die<br />

Fehlverwendung von Po<strong>in</strong>tern entstehen, s<strong>in</strong>d üblicherweise außerordentlich<br />

schwer zu lokalisieren, denn nur zu oft hat der Fehler selbst noch ke<strong>in</strong>e sofort<br />

merkbaren Auswirkungen. Die Katastrophe tritt nicht selten erst viel<br />

später, zu irgende<strong>in</strong>em völlig unbestimmten Zeitpunkt, ans Tageslicht. Dann<br />

nämlich, wenn e<strong>in</strong> Programm endgültig se<strong>in</strong>em durche<strong>in</strong>ander gekommenen<br />

Heap ohne e<strong>in</strong>en direkt erkennbaren Grund zum Opfer fällt und entweder<br />

s<strong>in</strong>nlose Ergebnisse produziert oder abstürzt.<br />

Neben den altbekannten Po<strong>in</strong>tern bietet C ++ auch die sogenannten References<br />

an, die es <strong>in</strong> C nicht gibt. Man könnte References auch salopp als<br />

versteckte Po<strong>in</strong>ter bezeichnen. In jedem Fall s<strong>in</strong>d References wunderbar als<br />

E<strong>in</strong>stieg <strong>in</strong> die Welt der Adressen geeignet und werden daher <strong>in</strong> der Folge<br />

zuerst behandelt, bevor wir uns den Po<strong>in</strong>tern <strong>in</strong> ihrer Hardcore-Variante<br />

zuwenden.<br />

6.1 References<br />

Wie C, so unterstützt auch C ++ bei Funktionsaufrufen ausschließlich callby-value<br />

zur Parameterübergabe. Manchmal will man allerd<strong>in</strong>gs auch e<strong>in</strong>en<br />

call-by-reference erreichen, also e<strong>in</strong>en übergebenen Parameter nachhaltig im<br />

aufrufenden Programmteil verändern. Die e<strong>in</strong>zige Möglichkeit, dies zu bewerkstelligen,<br />

ist der Umweg über e<strong>in</strong>e Adresse, die auf die Orig<strong>in</strong>alvariable<br />

verweist, auf die sich der Parameter bezieht.<br />

Neben e<strong>in</strong>em gewollten nachhaltigen Verändern von Variablen gibt es auch<br />

noch e<strong>in</strong>en anderen Grund, der e<strong>in</strong>en call-by-reference notwendig macht: E<strong>in</strong><br />

call-by-value z.B. mit e<strong>in</strong>er struct als Parameter führt sehr oft zu e<strong>in</strong>em

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!