Verstehen des Problems: Unmodifizierte Zeigerübergabe
In diesem Codeausschnitt empfängt die clickOnBubble-Funktion einen Zeiger auf ein Bubble-Objekt (targetBubble) und ein Vektor von Blasenzeigern (Blasen). Das Problem besteht darin, dass nach der Ausführung der Funktion der an die Funktion übergebene targetBubble-Zeiger unverändert bleibt. Es wird erwartet, dass die Funktion den targetBubble-Zeiger so ändert, dass er auf eine bestimmte Blase im Blasenvektor zeigt, aber das geschieht nicht.
Übergabe einer Kopie des Zeigers
Der Grund für dieses Verhalten ist, dass Sie eine Kopie des targetBubble-Zeigers übergeben, keine Referenz. Wenn Sie eine Kopie eines Zeigers übergeben, werden alle am Zeiger innerhalb der Funktion vorgenommenen Änderungen nicht im ursprünglichen Zeiger außerhalb der Funktion widergespiegelt.
Lösung: Verwenden einer Zeigerreferenz oder eines Zeigers auf einen Zeiger
Um sicherzustellen, dass der targetBubble-Zeiger außerhalb der Funktion geändert wird, müssen Sie einen Verweis auf den Zeiger übergeben oder einen Zeiger auf verwenden Zeiger.
Verwenden einer Zeigerreferenz:
void clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *>& bubbles, Bubble *&targetBubble) { targetBubble = bubbles[i]; // Modified pointer here is reflected outside function }
Verwenden eines Zeigers auf Zeiger:
void clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *>& bubbles, Bubble **targetBubble) { *targetBubble = bubbles[i]; // Modified pointer here is reflected outside function }
In In beiden Fällen wird der geänderte targetBubble-Zeiger innerhalb der Funktion im ursprünglichen targetBubble-Zeiger außerhalb der Funktion widergespiegelt Funktion.
Das obige ist der detaillierte Inhalt vonWarum ändert sich mein Zeiger nicht, nachdem ich ihn an eine Funktion übergeben habe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!