Es kann auch durchaus sinnvoll sein einen Pointer als Referenz zu übergeben. So könnte eine Funktion zum Vertauschen zweier Objekte statt den Inhalt zu vertauschen die Pointer auf die Objekte vertausche, so daß die Objekte nicht im Speicher hin- und hergeschoben werden müssen. So kann die Vertauschung bei großen Objekten effizienter vonstatten gehen. Damit aber nach der Vertauschung die Pointer nachhaltig geändert sind müssen diese als Referenz übergeben worden sein. Wie bei der sonstigen Referenzübergabe müssen die Referenzen sogenannte LValues sein, also Werte, die auf der linken Seite einer Zuweisung stehen dürfen.
int a = 3, b = 7;
vertauschen(&a, &b); // a) Falsch: Es werden temporäre Kopien von
void vertauschen(int* &a, int* &b)
{
int* tmp = a;
a = b;
b = tmp;
}
int* pa = &a; *pb = &b;
// Adresszeigern gemacht
// b) daher: blödsinnig
vertauschen(pa, pb);
cout << a << b; // 3 7 : a und b wurden nicht vertauscht
cout << *pa << *pb // 7 3 : Zeiger wurden vertauscht