Die erste ( int *
) übergibt einen Zeiger-auf-Ganzzahl als Wert; die zweite ( int &
) übergibt eine Ganzzahl als Referenz. Beide Methoden können verwendet werden, um eine abstrakte "Referenzsemantik" zu implementieren, aber in C++ sollten Sie, wenn möglich, echte Referenzen verwenden.
Wenn Sie Zeiger verwenden, um Referenzsemantik zu implementieren, übergeben Sie als Wert eine Zeiger auf das Objekt, auf das Sie verweisen wollen, und Sie Dereferenzierung den Zeiger, um den tatsächlichen Objektverweis zu erhalten. In C, wo es keine Referenzen in der Sprache gibt, ist das die einzige Möglichkeit, Referenzsemantik zu implementieren, aber in C++ gibt es zu diesem Zweck echte Referenztypen in der Sprache.
Beachten Sie, dass die Übergabe eines Zeigers etwas anders verwendet werden kann als eine Referenz, da Sie einen Null-Zeiger übergeben können, um zusätzliche Semantik zu vermitteln, und Sie können auch die Zeigervariable modifizieren (z. B. für die Verwendung der lokalen Kopie des Zeigers im Bereich des Aufrufenden, um ein Array zu durchlaufen).
Aber um es kurz zu machen: Verwenden Sie Referenzen. Verwenden Sie in C++ keine nackten Zeiger. (Um Referenzsemantik zu implementieren, verwenden Sie Referenzen, und um alles andere zu implementieren, wofür nackte Zeiger (miss)gebraucht werden können, verwenden Sie das entsprechende Idiom auf höherer Ebene). Das grundlegende Problem mit nackten Zeigern ist, dass sie keine Eigentum Semantik, und C++ verfügt über weitaus bessere Werkzeuge zum Schreiben von wartbarem, lokalem und selbstdokumentierendem Code.