Heim > Backend-Entwicklung > C++ > Wie kann ich einen an eine C-Funktion übergebenen Zeiger ändern und diese Änderungen im aufrufenden Bereich widerspiegeln?

Wie kann ich einen an eine C-Funktion übergebenen Zeiger ändern und diese Änderungen im aufrufenden Bereich widerspiegeln?

Barbara Streisand
Freigeben: 2024-12-26 10:15:16
Original
494 Leute haben es durchsucht

How Can I Modify a Pointer Passed to a C   Function and Reflect Those Changes in the Calling Scope?

Funktionsverhalten: Übergabe von Zeigern in C

In C ermöglicht die Übergabe eines Zeigers an eine Funktion die Änderung der ursprünglichen Variablen im aufrufenden Bereich . Beim Umgang mit Zeigern können jedoch bestimmte Nuancen auftreten.

Problem:

Betrachten Sie eine Funktion, die einen übergebenen Zeiger ändert, wie im folgenden Beispiel:

bool clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *> bubbles, Bubble *targetBubble) {
    targetBubble = bubbles[i];
}
Nach dem Login kopieren

Trotz der Änderung des „targetBubble“-Zeigers innerhalb der Funktion werden Änderungen nicht außerhalb von widergespiegelt it.

Grund und Lösung:

Das Problem entsteht durch die Übergabe einer Kopie des Zeigers und nicht eines Verweises darauf. Um dies zu beheben, können Sie die folgenden Techniken verwenden:

  1. Zeiger auf Zeiger:
    Übergeben Sie einen Zeiger an den Zeiger, mit dem Sie das Original ändern können Zeiger:

    void foo(int **ptr) //pointer to pointer
    {
        *ptr = new int[10]; //just for example, use RAII in a real world
    }
    Nach dem Login kopieren
  2. Referenz auf Zeiger:
    Übergeben Sie einen Verweis auf den Zeiger, der den ursprünglichen Zeiger direkt ändert:

    void bar(int *&ptr) //reference to pointer (a bit confusing look)
    {
        ptr = new int[10];
    }
    Nach dem Login kopieren

Durch die Implementierung beider Ansätze können Sie den Zeiger im effektiv ändern Aufrufbereich, um sicherzustellen, dass innerhalb der Funktion vorgenommene Änderungen extern widergespiegelt werden.

Das obige ist der detaillierte Inhalt vonWie kann ich einen an eine C-Funktion übergebenen Zeiger ändern und diese Änderungen im aufrufenden Bereich widerspiegeln?. 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