Heim > Backend-Entwicklung > C++ > Warum ändert das Ändern eines Zeigers in einer C-Funktion nicht den ursprünglichen Zeiger?

Warum ändert das Ändern eines Zeigers in einer C-Funktion nicht den ursprünglichen Zeiger?

Linda Hamilton
Freigeben: 2024-12-27 07:17:09
Original
269 Leute haben es durchsucht

Why Doesn't Modifying a Pointer in a C   Function Change the Original Pointer?

Funktion ändert den übergebenen Zeiger in C nicht

In C kommt es zu Verwirrung, wenn versucht wird, einen an eine Funktion übergebenen Zeiger zu ändern. Das Problem liegt in der inhärenten Natur von Zeigern. Wenn eine Funktion einen Zeiger als Argument empfängt, verarbeitet sie tatsächlich eine Kopie dieses Zeigers und nicht den ursprünglichen Zeiger selbst.

Betrachten Sie die Beispielfunktion clickOnBubble:

bool clickOnBubble(sf::Vector2i &mousePos, std::vector<Bubble *>& bubbles, Bubble *targetBubble) {
    // ... your code
}
Nach dem Login kopieren

Wenn Sie bestehen Wenn Sie einen Zeiger als Parameter verwenden, erstellt die Funktion eine neue Kopie dieses Zeigers in ihrem lokalen Bereich. Alle an der lokalen Kopie des Zeigers vorgenommenen Änderungen wirken sich nicht auf den ursprünglichen Zeiger außerhalb der Funktion aus. Im obigen Szenario versucht der Code, targetBubble einem Element des Blasenvektors innerhalb der Funktion zuzuweisen, aber diese Zuweisung ändert nur die lokale Kopie von targetBubble.

Um den Zeiger außerhalb der Funktion effektiv zu ändern, verwenden Sie entweder ein Zeiger auf einen Zeiger oder eine Referenz auf einen Zeiger. Dadurch kann die Funktion auf den ursprünglichen Zeiger zugreifen und ihn ändern.

Einen Zeiger auf einen Zeiger verwenden:

void foo(int **ptr) {
    *ptr = new int[10]; // Assign memory to the pointed-to location
}
Nach dem Login kopieren

In diesem Beispiel nimmt die Funktion foo einen Zeiger auf einen Zeiger als Argument. Es kann nun den Zeiger selbst ändern und ihm einen neuen Wert zuweisen.

Verwenden einer Referenz auf einen Zeiger:

void bar(int *&ptr) {
    ptr = new int[10]; // Assign memory to the pointed-to location
}
Nach dem Login kopieren

Hier nimmt die Funktionsleiste eine Verweis auf einen Zeiger. Es kann direkt auf den ursprünglichen Zeiger zugreifen und ihn ändern.

Das obige ist der detaillierte Inhalt vonWarum ändert das Ändern eines Zeigers in einer C-Funktion nicht den ursprünglichen Zeiger?. 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