2017-02-23 4 views
3

Ich habe eine allgemeine Frage, warum kann ich die Adresse des Zeigers nicht als Referenz übergeben?Zeigeradresse als Referenz in Funktion

void domdom(string &foo) 
{ 
foo = ""; 
} 

string fooso = "blabal"; 
string* p_fooso = fooso; 

domdom(p_fooso); // <-- why is that not possible? And what should I pass to be able to modify foosoo? 

Ich weiß, ich könnte die Funktion domdom ändern (string* foo) zu akzeptieren, aber es ist auch möglich, die string fooso in der Funktion zu ändern, indem Sie den Zeiger auf sie verwenden und die gegebene Funktion?

+1

'string * p_fooso = foso;' ist ein Fehler; Überprüfen Sie Ihre Compiler-Ausgabe. –

Antwort

6

Warum kann ich die Adresse des Zeigers nicht als Referenz übergeben?

Denn so ist die Sprache definiert.

Stattdessen können Sie den Zeiger dereferenzieren einen Verweis auf die Zeichenfolge erhalten:

domdom(*p_fooso); 

oder direkt das eigentliche Objekt übergeben:

domdom(fooso); 

Beachten Sie auch, dass string* p_fooso = fooso; doesn‘ t kompilieren. Sie müssen string* p_fooso = &fooso; schreiben.

+0

danke, ich dachte, die Referenz speichert die Adresse sowie den Zeiger auf die gleiche Weise. – Ammy

+0

@Ammy Die Referenz * speichert * die Adresse intern, aber sie wird auf eine sehr unterschiedliche Weise verwendet, so dass die beiden absichtlich nicht austauschbar gemacht werden. – user4815162342

2

Deklarieren Sie einfach p_fooso als String-Referenztyp. Vielleicht möchten Sie die Variable als r_foso umbenennen!

string& r_fooso=fooso; 
1

Zeiger und Referenzen sind unter der Haube ähnlich, aber anders verwendet, weshalb wird sie durch implizite Konvertierung Mischen nicht von C++ erlaubt ist, um Verwirrung zu vermeiden.

Sie können jedoch immer explizit einen Verweis auf einen Zeiger und umgekehrt ohne konvertieren den Overhead einer Kopie. Wenn Sie beispielsweise die Funktion domdom(*p_fooso) aufrufen, erhalten Sie den gewünschten Effekt, d. H. Die Funktion erhält einen Verweis auf das genaue Objekt, das Sie durch Dereferenzieren des Zeigers erhalten würden.

Verwandte Themen