Ich habe meine Funktion und fülle dort targetBubble
, aber sie wird nicht gefüllt, nachdem ich diese Funktion aufgerufen habe, aber ich weiß, dass sie in diese Funktion gefüllt wurde, weil ich dort einen Ausgabecode habe.
bool clickOnBubble(sf::Vector2i & mousePos, std::vector<Bubble *> bubbles, Bubble * targetBubble) {
targetBubble = bubbles[i];
}
Und ich übergebe den Zeiger so
Bubble * targetBubble = NULL;
clickOnBubble(mousePos, bubbles, targetBubble);
Warum funktioniert es bitte nicht? Vielen Dank
Weil Sie eine Kopie des Zeigers übergeben. Zum Ändern des Zeigers benötigen Sie Folgendes:
void foo(int **ptr) //pointer to pointer
{
*ptr = new int[10]; //just for example, use RAII in a real world
}
oder
void bar(int *& ptr) //reference to pointer (a bit confusing look)
{
ptr = new int[10];
}
Sie übergeben den Zeiger als Wert.
Übergeben Sie ein Verweis auf den Zeiger, wenn Sie ihn aktualisieren möchten.
bool clickOnBubble(sf::Vector2i& mousePos, std::vector<Bubble *> bubbles, Bubble *& t)
wenn du schreibst
int b = 0;
foo(b);
int foo(int a)
{
a = 1;
}
sie ändern 'b' nicht, da a eine Kopie von b ist
wenn Sie b ändern möchten, müssen Sie die Adresse von b übergeben
int b = 0;
foo(&b);
int foo(int *a)
{
*a = 1;
}
gleiches gilt für Hinweise:
int* b = 0;
foo(b);
int foo(int* a)
{
a = malloc(10); // here you are just changing
// what the copy of b is pointing to,
// not what b is pointing to
}
so ändern Sie, wo b zeigt, um die Adresse zu übergeben:
int* b = 0;
foo(&b);
int foo(int** a)
{
*a = 1; // here you changing what b is pointing to
}
hth
Sie können den Zeiger nur ändern, wenn Sie ihn als (nicht konstanten) Verweis oder als Doppelzeiger übergeben. Durch die Übergabe des Werts wird eine Kopie des Objekts erstellt, und alle Änderungen am Objekt werden an der Kopie und nicht am Objekt vorgenommen. Sie können das Objekt ändern, auf das der Zeiger zeigt, aber nicht den Zeiger selbst, wenn Sie einen Wert übergeben.
Lesen Sie diese Frage durch, um die Unterschiede genauer zu verstehen. Wann als Referenz übergeben und wann als Zeiger in C++ übergeben?