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.2 Po<strong>in</strong>ter 131<br />

e<strong>in</strong>en konstanten Po<strong>in</strong>ter auf e<strong>in</strong>en (nicht konstante) <strong>in</strong>t32 dar. Wenn man<br />

dies weitersp<strong>in</strong>nt, ist naturgemäß e<strong>in</strong>e Variable<br />

const <strong>in</strong>t32 *const var;<br />

e<strong>in</strong> konstanter Po<strong>in</strong>ter auf e<strong>in</strong>en konstanten <strong>in</strong>t32. Genau so etwas brauchen<br />

wir hier, nur dass var selbst e<strong>in</strong> Array ist. Wir wollen ja e<strong>in</strong>en Doppelpo<strong>in</strong>ter<br />

an die Funktion übergeben, bei dem weder die e<strong>in</strong>zelnen Werte, die er hält,<br />

also die Reihen, noch die Werte, die von diesen gehalten werden, also die<br />

tatsächlichen Zellen, verändert werden können. Also haben wir es hier mit<br />

e<strong>in</strong>em Po<strong>in</strong>ter auf e<strong>in</strong> konstantes Array auf konstante Werte zu tun.<br />

Da ich weiß, dass viele Entwickler e<strong>in</strong> kle<strong>in</strong>es Problem damit haben, const<br />

korrekt <strong>in</strong> komplizierteren Konstrukten e<strong>in</strong>zusetzen, wie z.B. References auf<br />

Po<strong>in</strong>ter-Variablen, etc. Deshalb hier e<strong>in</strong> kle<strong>in</strong>er Tipp: const ist l<strong>in</strong>ksb<strong>in</strong>dend,<br />

soll heißen, es bezieht sich pr<strong>in</strong>zipiell immer auf den l<strong>in</strong>ks von ihm stehenden<br />

Teil des Typs. Dass man const auch quasi rechtsb<strong>in</strong>dend verwenden kann, ist<br />

nur e<strong>in</strong>e Konvention, die der verbesserten Lesbarkeit dienen soll. Sollte also<br />

nach dieser Konvention const ganz l<strong>in</strong>ks stehen, so wird es so ausgewertet,<br />

als ob es rechts neben dem ersten Ausdruck vorkommen würde. Verwirrend?<br />

Ke<strong>in</strong> Problem, mit e<strong>in</strong>em kle<strong>in</strong>en Beispiel ist alles klar:<br />

Der Ausdruck<br />

const <strong>in</strong>t32 *var<br />

ist äquivalent zu<br />

<strong>in</strong>t32 const *var<br />

und sollte, wenn man ganz korrekt se<strong>in</strong> will, auch so geschrieben werden.<br />

Nur hat sich <strong>in</strong> Entwicklerkreisen über lange Zeit die erstere Schreibweise<br />

e<strong>in</strong>gebürgert, deshalb möchte ich, wo es nicht notwendig ist, damit auch<br />

nicht brechen.<br />

Vorsicht Falle: Von Neul<strong>in</strong>gen, aber auch leider von erfahreneren Entwicklern,<br />

werden immer wieder völlig unzulässige Annahmen über die Kompatibilität<br />

von Mehrfacharrays und Mehrfachpo<strong>in</strong>tern getroffen. Diese beiden<br />

Typen s<strong>in</strong>d nicht notwendigerweise gegene<strong>in</strong>ander austauschbar, denn es<br />

gibt ke<strong>in</strong>e genaue Def<strong>in</strong>ition, wie mehrdimensionale Arrays nun <strong>in</strong>tern speichermäßig<br />

organisiert s<strong>in</strong>d.<br />

Vorsicht Falle: E<strong>in</strong>es sieht man am Beispiel mit den Mehrfachpo<strong>in</strong>tern sehr<br />

deutlich: Es ist wirklich nicht allzu schwierig, Fehler bei deren Behandlung<br />

e<strong>in</strong>zubauen! Aus diesem Grund s<strong>in</strong>d auch solche Konstrukte im laufenden Code<br />

von C ++ Programmen verpönt und sollten unbed<strong>in</strong>gt durch entsprechende<br />

Classes ersetzt werden, die solches Verhalten kapseln. Zu diesem Thema<br />

werde ich im OO-Teil noch mehr als nur e<strong>in</strong> paar Worte verlieren :-).<br />

Po<strong>in</strong>ter und Typecasts. Po<strong>in</strong>ter halten per Def<strong>in</strong>ition e<strong>in</strong>fach Adressen.<br />

Dass auch noch e<strong>in</strong> Typ mit angegeben wird, hat damit zu tun, dass man<br />

sie richtig behandeln will. Man will ja im Fall e<strong>in</strong>es <strong>in</strong>dizierten Zugriffs das

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!