ReferenzparameterReferenzparameter (englisch call by reference oder pass by reference) sind Parameter von Unterprogrammen in Programmiersprachen, mittels derer ein Unterprogramm die übergebenen Argumente wie dessen übergeordnetes Programm verwenden und ändern kann. Jede Veränderung bleibt auch nach Verlassen des Unterprogramms erhalten, da keine Kopien für das Unterprogramm erzeugt werden. Der Nachteil hierbei besteht darin, dass eine ungewollte Beeinflussung von Hauptprogrammvariablen im Unterprogramm möglich ist. Der Name kommt daher, dass der Compiler in den meisten Programmiersprachen die Adresse des Speicherbereichs einer Variablen oder eines Feldelements übergibt (also einen Zeiger auf die Variable oder das Feldelement), die als Referenz (Verweis, Alias) aufgefasst werden kann. Normalerweise stehen neben Referenzparametern auch Wertparameter zur Verfügung, seltener Wertergebnisparameter. BeispielIn der Sprache Pascal muss beim Unterprogrammaufruf für jeden Referenzparameter eine Variable, ein Feld- oder Strukturelement als tatsächlicher Parameter angegeben werden: // Uebergabe der Variablen X als Referenzparameter in PASCAL
program Demo(input, output);
procedure Inkrementiere(var n: Integer);
begin
n := n + 1;
end;
var X: integer;
begin
Write('Bitte X eingeben');
ReadLn(X);
Inkrementiere(X);
Write('Der Nachfolger von X ist: ');
WriteLn(X);
end.
Die Funktion Hier ein kleines Beispiel in C++: #include <iostream>
void do_the_square(double& x) {
x = x * x;
}
int main() {
double value = 2;
do_the_square(value);
std::cout << "The square_meters are: " << value << std::endl;
return 0;
}
Die Funktion Beim Aufruf der Funktion muss nur der Wert Formale und tatsächliche ParameterIm Beispiel wird der Referenzparameter
Moderne (optimierende) Compiler können bei Übergabe von Wertparametern ermitteln, ob eine Kopie nötig ist und gegebenenfalls darauf verzichten. Simulation von Referenzparametern durch ZeigerDas folgende Beispiel ist in der Sprache C geschrieben, welche keine Referenzparameter kennt. Durch Benutzung von Zeigern kann aber ein ähnliches Verhalten realisiert werden. // Uebergabe der Variablen x als Zeigerparameter p in C
#include <stdio.h>
void increment_p(int* p) {
*p += 1;
}
int main() {
int x = 3;
increment_p(&x);
printf("Das Ergebnis ist %d\n", x);
return 0;
}
In Zeile 15 wird der Adressoperator Referenzparameter in Form von ReferenzenIn der Sprache C++ können Referenzparameter ebenso wie in C als Zeiger realisiert werden. Es wurde aber auch eine Spracherweiterung eigens zu diesem Zweck eingeführt. Diese Spracherweiterung nennt sich Referenz und hat folgende Notation: void increment_r(int& r) {
r += 1;
}
Im Vergleich dazu noch einmal das Beispiel für Zeiger: void increment_p(int* p) {
*p += 1;
}
Bei der Variante Aufruf der Funktion: // ...
increment_r(x);
// ...
Im Unterschied zu der Variante mit Verwendende ProgrammiersprachenSiehe auch
|