07.10.2013 Aufrufe

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

c○ Prof. Dr. B. Bartning, HS <strong>Emden</strong>/<strong>Leer</strong> Rumpfskript ” Informatik I/II“ (WS/SS 2010/11) 142<br />

z. B. falsch: arr++, arr=....<br />

Dagegen zu Funktionsparametern s. (12.44c).<br />

12.4 Zeiger als Funktionsparameter<br />

(12.40) Übb In diesem Unterkapitel wird gezeigt, wie man Zeiger als Funktionsparameter einsetzen<br />

kann. Dieses ist in C die einzige Möglichkeit, so etwas wie eine Referenzübergabe<br />

programmtechnisch zu imitieren. Für C ++-Programmierer ist dieser Aspekt nicht mehr ganz<br />

so wichtig, da es den Referenztyp gibt. Jedoch auch in C ++ sollte man Folgerungen kennen,<br />

zumal ja Arraybezeichnungen als Parameter nichts anderes als Zeiger sind.<br />

(12.41) Parameterübergabearten bei Funktionen, vgl. (Kap. 7.4):<br />

• CALL BY VALUE C/C++ : Der Wert des aktuellen Parameters wird auf den formalen<br />

Parameter kopiert.<br />

• CALL BY REFERENCE C++ : Der formale Parameter ist während des Funktionsdurchlaufs<br />

ein Synonym des aktuellen Parameters.<br />

(12.42) Zeiger als Funktionsparameter:<br />

C/C++ Auch mit Hilfe des CALL BY VALUE ist die Nachahmung eines CALL BY REFE-<br />

RENCE möglich, nämlich durch explizite Übergabe von Zeigern.<br />

Der aktuelle Parameter (Adresse einer Variablen) wird kopiert auf den formalen Parameter<br />

(CALL BY VALUE); diese kopierte Adresse zeigt jedoch auf denselben Speicherplatz wie die<br />

Originaladresse, d. h. die Funktion kann über diesen Zeiger Variable des rufenden Programms<br />

verändern.<br />

Bsp vgl. (7.45), Vertauschen hier mit Zeigern (tausch1) verwirklicht, zusätzlich zu Referenzen (tausch2) wie<br />

dort:<br />

void tausch1(int *wert1, int *wert2)<br />

{ int merk;<br />

merk=*wert1;<br />

*wert1=*wert2;<br />

*wert2=merk;<br />

}<br />

void tausch2(int &wert1, int &wert2)<br />

{<br />

int merk;<br />

merk=wert1;<br />

wert1=wert2;<br />

wert2=merk;<br />

}<br />

// Aufrufe (innerhalb einer anderen Funktion):<br />

int i=14,j=2;<br />

cout

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!