Heim > Backend-Entwicklung > C++ > Warum ändert sich mein Zeiger nicht, nachdem ich ihn an eine Funktion übergeben habe?

Warum ändert sich mein Zeiger nicht, nachdem ich ihn an eine Funktion übergeben habe?

Patricia Arquette
Freigeben: 2024-12-26 12:23:10
Original
1036 Leute haben es durchsucht

Why Doesn't My Pointer Change After Passing It to a Function?

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
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage