Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
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