C kennt nicht wie andere Sprachen die Möglichkeit, Variablen per Referenz zu übergeben. In Pascal beispielsweise wird dies durch das Schlüsselwort var vor dem Parameternamen implementiert.

In C bleibt nur die Möglichkeit, eine Referenz als Wert zu übergeben. Ein solcher Wert ist eine Adresse bzw. ein Zeiger. Hierbei muss bei Zugriffen ständig der Dereferenzierungsoperator * verwendet werden (s.u. erste Version von swap).

In C++ wurde die Übergabe per Referenz eingebaut. Hierzu wird der Referenzierungsoperator & hinter dem Typnamen notiert. Bei Zugriffen entfällt die Verwendung des Dereferenzierungsoperators (s.u. zweite Version von swap).

Das Übersetzungsergebnis ist in beiden Fällen gleich. Der Unterschied besteht allein in der Darstellung des Quelltextes.

#include <iostream>
#include <conio>

using namespace std;

void swap(int *a, int *b) // Import von Adressen/Zeigern (C und C++)
{
 int temp = *a;
 *a = *b;
 *b = temp;
}

void swap(int& a, int& b) // Import von int per Referenz (nur C++)
{
 int temp = a;
 a = b;
 b = temp;
}


int main()
{
 int i1, i2;
 cout << "Demonstration von Referenzen\n\n"
  << "Geben Sie zwei Ganzzahlen fuer i1 und i2 ein: ";
 cin >> i1 >> i2;
 cout << "\nIhre Eingaben: i1=" << i1 << "  i2=" << i2 << endl;
 swap(&i1,&i2); // Adressen werden als Referenzwerte uebergeben.
 cout << "Nach Aufruf von swap(&i1,&i2): i1="
  << i1 << " i2=" << i2 << endl;
 swap(i1,i2); // Variablen werden per Referenz uebergeben.
 cout << "Nach Aufruf von swap(i1,i2): i1="
  << i1 << " i2=" << i2 << endl;
 return 0;
}