Erklärung für C++ Codeschnippsel



  • void pP1(float* pi) {
     *pi = 3.14;
    
    float* pP2() {
     float* pi = new float;
     *pi = 3.1415
     return pi;
    

    Kann mir jemand sagen, was genau in den Blöcken passiert bzw was die einzelnen Zeilen bedeuten?
    Dies ist nur ein kleiner Ausschnitt aus einem Code.

    Vielen Dank



  • IchWeißNix schrieb:

    void pP1(float* pi)
    {
       *pi = 3.14;
    }
    

    Die Funktion bekommt eine Zeiger auf einen float-Wert als Parameter übergeben. Und der float-Wert, auf den dieser Zeiger zeigt, wird von der Funktion auf den Wert 3.14 gesetzt.

    IchWeißNix schrieb:

    float* pP2()
    {
      float* pi = new float;
      *pi = 3.1415
      return pi;
    }
    

    Die Funktion allokiert zunächst einen neuen float-Wert auf dem Heap (mittels new Operator). Dies liefert einen Zeiger auf den neu allokierten float-Wert. Und der float-Wert, auf den der Zeiger zeigt, wird im Anschluss auf den Wert 3.1415 gesetzt. Zu guter Letzt gibt die Funktion eben diesen Zeiger als Rückgabewert zurück.

    Vielleicht solltest Du erst einmal etwas über die Funktionsweise von Zeigern lesen? 😕
    * http://www.c-howto.de/tutorial-zeiger.html
    * http://de.wikibooks.org/wiki/C-Programmierung:_Zeiger



  • Danke, ich dachte der Stern vor dem pi ist ein Dereferenz-Operator.



  • IchWeißNix schrieb:

    Danke, ich dachte der Stern vor dem pi ist ein Dereferenz-Operator.

    Bei einer Variablen- bzw. Parameter-Deklaration gibt der Stern erstmal nur an, dass es sich hierbei um einen Zeiger handelt. float* z.B. ist einer Zeiger auf einen float-Wert.

    Wenn Du den Zeiger später benutzt, dann ist der Stern der Dereferenz-Operator, richtig!

    Deshalb verändert die Zuweisung *pi = 3.14 auch nicht den Zeiger "pi", sondern diejenige Stelle im Speicher, auf die der Zeiger "pi" gerade zeigt. pi = NULL hingegen verändert den Zeiger selbst 😉



  • @IchWeißNix: Nur weils noch nicht gesagt wurde: du bist im falschen Unterforum gelandet, dein Code ist C++, hier ist C++/CLI, eine .NET Sprache.


Log in to reply