"&" Operator nach Datentyp?



  • Hey,
    kleine und schnelle Frage. Warum schreibt man in beispielsweise einer Methode:

    void Parameter(int &x)
    

    Ich mein, wenn man die Methode letztebdlich aufruft muss man ja einen Wert angeben. Aber was ist jetzt der Unterschied zu:

    void Parameter(int x)
    

    ?
    Wäre dankbar für ne Antwort, cu.



  • Such mal nach Referenzen.



  • hawai schrieb:

    kleine und schnelle Frage. Warum schreibt man in beispielsweise einer Methode:

    Es gibt mehrere Formen der Parameterübergabe, beispielsweise:

    void DoSomething(int paramter);              // 1. Wertkopie (Call by Value)
    void DoSomething(int & paramter);            // 2. Referenz, keine Kopie (Call by Reference)
    void DoSomething(int const & paramter);      // 3. Konstante Referenz
    void DoSomething(const int & paramter);      // Alternative Schreibweise zu 3.
    void DoSomething(int * paramter);            // 4. Call By Reference/Pointer*
    void DoSomething(int const * paramter);      // 5. Konstanter Wert, Variabler Zeiger
    void DoSomething(const int * paramter);      // Alternative Schreibweise zu 5.
    void DoSomething(int * const paramter);      // 6. Variabler Wert, Konstanter Zeiger
    void DoSomething(int const * const paramter); // 7. Konstanter Wert, Konstanter Zeiger
    void DoSomething(const int * const paramter); // Alternative Schreibweise zu 7.
    
    // Nachtrag: natürlich kann man Kopien auch konstant machen, hat aber keine echte Relevanz
    void DoSomething(int const paramter);         // 8. Konstante Wertkopie
    void DoSomething(const int paramter);         // Alternative Schreibweise zu 8.
    

    * Zeigerübergaben werden in der Regel auch als Call By Referenz bezeichnet

    1. Bei dem Aufruf wird der Wert kopiert. Das heißt, du arbeitest mit einer Kopie des ursprünglichen Wertes. Eine Änderung am Parameter ändert nicht den ursprünglichen Wert.
    Sollte die Standardübergabe bei integralen Datentypen sein.

    2. Bei einem Aufruf wird eine Referenz, ein Aliasname übergeben. Das heißt das du mit dem echten Wert arbeitest nur unter einem anderen Namen. Jede Änderung ändert auch den ursprungswert.

    3. Bei einem Aufruf wird eine Referenz, ein Aliasname übergeben. Diese Referenz ist aber Konstant, so das keine Änderungen möglich sind.
    Sollte die Standardübergabe bei komplexen Datentypen sein (Da kopien vermieden werden).

    4-7 Beschreibe ich hier nicht explizit, die Anmerkungen werden dir aber helfen wenn du dich ein wenig mit Zeigerarithmetik auskennst...

    8. Nachgetragen: Wie 1, nur das du die Kopie auch nicht ändern kannst

    Nachtrag: Du wirst hier auch den Grund sehen, warum manche das const hinter den Typ schreiben: Einheitliche Betrachtung dessen was konstant ist (In diesem Fall immer das vor dem const. Gelesen (Beispiel): int-Konstante, Zeiger-Konstante).



  • Super, danke schön euch Beiden!


Anmelden zum Antworten