Frage von Sebbo92, 62

In C++ einen Zeiger per Call-by-Reference übergeben?

Hallo Zusammen,

ich möchte in C++ einen Zeiger an eine Funktion übergeben und den Wert des ursprünglichen Zeigers (Zeiger aus der main) überschreiben. Ich kenn zwar den Unterschied zwischen Call-by-Value und Call-by-Reference, leider weiß ich nicht, wie ich dass schreiben muss, wenn ich einen Zeiger mit Call-by-Reference übergeben will.

Vielen Dank für eure Hilfe

Antwort
von NoHumanBeing, 44

Ich könnte auch nur ausprobieren und versuchen, die "*" und "&" in die richtige Reihenfolge zu bringen.

Aber warum übergibst Du nicht einfach einen Pointer auf einen Pointer und dereferenzierst den in der Funktion einmal, sodass Du nur noch einen einfachen Pointer hast?

Oder muss die Funktion eine bestimmte Signatur haben, sodass Du dort keinen Pointer entgegennehmen "darfst"?

Weil im Grunde sind Referenzen ja restriktiver, als Pointer, d. h. alles, was Du mit Referenzen machen kannst, kannst Du auch mit Pointern machen. Referenzen sind eben "sicherer", weil sie bestimmte Dinge, die Du mit Pointern machen darfst, "verbieten" (Pointerarithmetik).

Kommentar von NoHumanBeing ,

So würde ich das ganze lösen.

#include <iostream>

struct Knoten
{
int daten;
struct Knoten* zeiger;
};

void create (int elemente, int werte, struct Knoten** laufzeiger)
{
Knoten* head = new Knoten;
head->zeiger = NULL;
*laufzeiger = head;
std::cout << *laufzeiger << std::endl;
}

int main (int argc, char** argv)
{
struct Knoten* laufzeiger;
create(0, 0, &laufzeiger);
std::cout << laufzeiger << std::endl;
return 0;
}

Aber ich habe herausgefunden, dass es auch so funktioniert, falls man es unbedingt mit einer Referenz machen möchte.

#include <iostream>

struct Knoten
{
int daten;
struct Knoten* zeiger;
};

void create (int elemente, int werte, struct Knoten*& laufzeiger)
{
Knoten* head = new Knoten;
head->zeiger = NULL;
laufzeiger = head;
std::cout << laufzeiger << std::endl;
}

int main (int argc, char** argv)
{
struct Knoten* laufzeiger;
create(0, 0, laufzeiger);
std::cout << laufzeiger << std::endl;
return 0;
}
Kommentar von Sebbo92 ,

Vielen Dank für die Antwort :)

Kommentar von NoHumanBeing ,

Keine Ursache! :-)

Es verhält sich übrigens genau so, wie man es erwarten sollte. "struct Knoten*&" ist "eine Referenz auf einen Pointer auf ein Struct". ;-)

Keine passende Antwort gefunden?

Fragen Sie die Community