Auch eine Übergabe eines Parameters kann mit Hilfe einer Referenz erfolgen, man spricht dabei von einer Referenzübergabe oder nutzt den englischen Terminus call by reference. Eine Referenzübergabe wird ebenfalls durch den Referenzoperator gekennzeichnet, so ist zum Beispiel in der folgenden Deklaration:
void funktion(int param1, int ¶m2);
der erste Parameter ein Wertparameter und der zweite ein Referenzparameter, d.h. der erste wird mittels Wert- der zweite mittels Referenzübergabe übergeben.
Um den Unterschied der beiden Übergabemethoden zu verstehen, muß man sich etwas mit der Funktionsweise eines Compilers auseinandersetzen. Der Compiler generiert nämlich bei einer Wertübergabe einen Code, bei dem eine lokale Variable in der Funktion erzeugt wird (sprich: ein Konstruktor für die Klasse wird aufgerufen - mehr dazu weiter hinten in diesem Kapitel), wobei dafür dann Speicher reserviert wird - die Variable ist eine Kopie der übergebenen, Änderungen an ihr wirken sich nicht auf die übergebene Variable aus.
Bei der Referenzübergabe wird aber keine lokale (bzgl. der Funktion) Kopie erzeugt, sondern es wird innerhalb der Funktion nur eine Referenzvariable generiert. Das führt zu wesentlichen Unterschieden:
Es können in der einfachen Form keine Konstanten mehr übergeben werden, da diese ja nicht referenziert werden können.