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
Barbara StreisandOriginal
2024-12-26 10:15:16496Durchsuche

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];
}

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
    }
  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];
    }

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!

Stellungnahme:
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