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 125<br />

Zeilen 51–56: Die Funktion show, die hier def<strong>in</strong>iert, ist demonstriert die Austauschbarkeit<br />

von Po<strong>in</strong>ter- und Array Variablen. Hier wird als erster<br />

Parameter e<strong>in</strong> Array entgegengenommen (const, denn wir wollen ja daran<br />

nichts ändern!). In Zeile 54 wird durch dieses Array e<strong>in</strong>fach mittels<br />

Po<strong>in</strong>terarithmetik durchgegangen.<br />

Der Grund, warum e<strong>in</strong> Array-Parameter genommen wurde, liegt auf der<br />

Hand: Man will damit signalisieren, dass man den Parameter wie e<strong>in</strong><br />

Array behandelt, auch wenn dieses eventuell nur die Länge 1 hätte.<br />

Der Grund, warum Po<strong>in</strong>terarithmetik trotzdem funktioniert, ist die bereits<br />

erwähnte Austauschbarkeit von statischen Arrays und Po<strong>in</strong>tern, da<br />

auch e<strong>in</strong> statisches Array h<strong>in</strong>ter den Kulissen als Po<strong>in</strong>ter dargestellt wird.<br />

Der Ausdruck *array++ bedeutet: Dereferenziere zuerst den Po<strong>in</strong>ter und<br />

liefere damit se<strong>in</strong>en Wert. Danach zähle den Po<strong>in</strong>ter (nicht den Wert!!!)<br />

um e<strong>in</strong> Element weiter. Dadurch wird das Array Schritt für Schritt durchgegangen.<br />

Der Grund, warum e<strong>in</strong>e Veränderung des Parameters array funktioniert,<br />

obwohl er durch const mit e<strong>in</strong>em Schreibschutz versehen wurde, ist e<strong>in</strong>fach:<br />

const bezieht sich auf den Inhalt, der sich h<strong>in</strong>ter dem Po<strong>in</strong>ter<br />

verbirgt, nicht auf die Po<strong>in</strong>tervariable, die ja nur e<strong>in</strong>e Kopie der Adresse<br />

enthält (call-by-value!). Wollte man e<strong>in</strong>em Element des übergebenen Arrays<br />

e<strong>in</strong>en neuen Wert zuweisen, dann würde sich natürlich der Compiler<br />

beschweren.<br />

6.2.3 Str<strong>in</strong>gs<br />

In C ++ werden, gleich wie <strong>in</strong> C, Str<strong>in</strong>gs e<strong>in</strong>fach durch statische oder dynamische<br />

char Arrays repräsentiert. E<strong>in</strong>e besondere Eigenschaft von Str<strong>in</strong>gs<br />

ist hierbei allerd<strong>in</strong>gs wichtig: Sie müssen immer mit e<strong>in</strong>em ’\0’ Character<br />

abgeschlossen werden!<br />

Im Pr<strong>in</strong>zip war das auch schon alles, was es dazu zu sagen gibt und ich<br />

halte mich derzeit noch bewusst bedeckt mit weiteren Ausführungen und<br />

e<strong>in</strong>em Demoprogramm dazu, denn gerade Str<strong>in</strong>gs s<strong>in</strong>d e<strong>in</strong>e der ganz typischen<br />

Anwendungen, bei denen uns durch die Objektorientiertheit von C ++<br />

die Arbeit deutlich erleichtert wird und die Gefahr von Fehlern deutlich verr<strong>in</strong>gert<br />

wird. E<strong>in</strong>e saubere, zeitgemäße OO-Repräsentation von Str<strong>in</strong>gs wird<br />

<strong>in</strong> Abschnitt 16.5 besprochen.<br />

6.2.4 Funktionspo<strong>in</strong>ter<br />

Wie bereits erwähnt wurde, kann man mit Po<strong>in</strong>tern nicht nur auf Daten<br />

zugreifen, sondern man kann auch Po<strong>in</strong>ter auf Funktionen zeigen lassen. Auf<br />

Umweg über solche Po<strong>in</strong>ter kann man diese Funktionen dann aufrufen.<br />

Funktionspo<strong>in</strong>ter s<strong>in</strong>d allerd<strong>in</strong>gs nicht ganz ungefährlich. Genau deswegen<br />

möchte ich hier nur erwähnen, dass es Funktionspo<strong>in</strong>ter gibt, dass jedoch

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!