Übergabe von Pointern an Funktionen

Pointer als Referenz übergeben

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.

void vertauschen(int* &a, int* &b)
{
  int* tmp = a;
  a = b;
  b = tmp;
}

int a = 3, b = 7;
int* pa = &a; *pb = &b;

vertauschen(&a, &b);    // a) Falsch: Es werden temporäre Kopien von
                        //            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