Funktionen call by value und call by reference/ unterschied, vorteile, nachteile



  • call-by-reference hat mit dem Rückgabewert gar nichts zu tun, ob das nun void oder int oder was auch immer ist hat überhaupt nichts bezüglich call-by-reference zu sagen.

    und meines Wissens nach ist das immer noch kein wirkliches Call-by-Reference, das wäre nämlich so(Die Variablennamen sind jetzt natürlich nicht mehr richtig, da es keine Zeiger mehr sind, aber ich habe alle Namen so gelassen, wie sie waren):

    #include <iostream>
    
    using namespace std;
    
    void Dreieckstausch (int& zeiger1, int& zeiger2) 
    {
         int ihilfsfeld;
         ihilfsfeld = zeiger1;
         zeiger1 = zeiger2;
         zeiger2 = ihilfsfeld;
    
    }     
    
    int main()
    {
    
    int izahl=4, izahl2=9;
    
    cout << "Inhalt der Variablen VOR Aufruf der Funktion: " << endl << izahl << endl << izahl2 << endl;
    
    Dreieckstausch (izahl, izahl2);
    
    cout << "Inhalt der Variablen NACH Aufruf der Funktion: " << endl << izahl << endl << izahl2 << endl;
    
    cout << endl << endl;
    system("PAUSE");
    return 0;    
    }
    


  • hää du hast jetzt die sternchen entfernt und vor die beiden variablen ein & gesetzt

    und nun? was willst du damit sagen?!



  • dass es sich jetzt um Referenzen handelt und nicht mehr um Pointer.
    Oder glaubst du die Zeichen sind zum Spaß da?



  • JustAnotherNoob schrieb:

    dass es sich jetzt um Referenzen handelt und nicht mehr um Pointer.
    Oder glaubst du die Zeichen sind zum Spaß da?

    Desssweiteren kannst du dir beim Funktionsaufruf das & vor der Variable sparen, was zwar unübersichtlicher ist, weil du nicht mehr weißt welche variable als referenz und welche als value übergeben wird, aber auch komfortabler ist.

    Natürlich können Call-By-Ref - Funktionen auch Rückgabewerte haben!
    Behauptet dein Lehrer das gegenteil?



  • JustAnotherNoob schrieb:

    ...dass es sich jetzt um Referenzen handelt und nicht mehr um Pointer.

    nur mal so nebenbei: eine referenz ist ein verweis auf irgendwas. diese aufgabe können auch pointer erfüllen. versteift euch doch nicht immer auf eine programmiersprache, die pointer und referenzen unterscheidet.
    🙂



  • -fricky- schrieb:

    JustAnotherNoob schrieb:

    ...dass es sich jetzt um Referenzen handelt und nicht mehr um Pointer.

    nur mal so nebenbei: eine referenz ist ein verweis auf irgendwas. diese aufgabe können auch pointer erfüllen. versteift euch doch nicht immer auf eine programmiersprache, die pointer und referenzen unterscheidet.
    🙂

    Und die Pointer werde beim Call wie übergeben? 🙄



  • Tachyon schrieb:

    Und die Pointer werde beim Call wie übergeben?

    ein pointer ist eine variable. sein inhalt ist eine referenz, also die adresse z.b. einer anderen variablen. wenn man pointer an funktionen übergibt, dann übergibt man nicht den pointer selber, sondern seinen inhalt. also, ganz klar: 'by reference'. und damit keine missverständnisse aufkommen: der 'value' in diesem kontext ist nicht der inhalt des pointers, sondern das, worauf der pointer zeigt.
    🙂



  • -fricky- schrieb:

    diese aufgabe können auch pointer erfüllen.

    Was völlig unerheblich ist. Es besteht ein Unterschied "X ist ein Y" und "X kann benutzt werden, um die Funktionalität von Y zu erhalten". Jedenfalls ist der Denkansatz, dass zwei Dinge, die die gleiche Funktionalität bereitstellen, gleich sind, einer, wie er typisch für die Sprache ist, auf die hin du dich nicht versteift wissen möchtest, während er so ganz und gar nicht zu der Sprache passt, die du favorisiert, schließlich ist das auch der Ausgangspunkt für Dinge wir Funktions- und Operatorüberladung - Sachen, die aus deinem Lager so gerne als überflüssig, fehlerträchtig und überhaupt unsinnig kritisiert werden.

    C hat keine Referenzen. C braucht keine Referenzen.
    Folglich existiert in C auch keine Übergabe per Referenz, sie ist dort auch nicht notwendig. Alles andere läuft darauf hinaus, sich die Dinge zurechtzudefinieren, um in der Diskussion recht zu behalten, anstatt sich einfach mal auf die Wahrheit zu konzentrieren.



  • -fricky- schrieb:

    [...]bla[...]

    Selten so einen Unsinn gelesen.



  • Hi,

    simon.gysi schrieb:

    muemmel schrieb:

    Hi,

    mal an einem anfassbaren Beispiel beschrieben.

    Wen Du ein paar Äpfel hast und Du fotografierst die oder machst Gipsabdrücke, die Du an die Funktion übergibst, dann ist das Call by Value. Dann kann die Funktion bewerten ob sie schön sind...

    Wenn aber die Äpfel geschält werden müssen, dann reicht weder ein Foto noch ein Abdruck, dann müssen die Äpfel selber rüber, Call by Referenz.

    Gruß Mümmel

    Naja, also ich weiss nicht so recht ob sowas überhaupt verglichen werden kann.
    Hilft den sowas? Kann mir nicht vorstellen, dass sowas hilft.
    Simon

    man muß halt die Leute da abholen wo sie herkommen. hier groß von Pointern und Referenzen zu reden hilft nicht übermäßig viel, wenn er noch überhaupt keinen blassen hat.

    Gruß Mümmel



  • camper schrieb:

    Es besteht ein Unterschied "X ist ein Y" und "X kann benutzt werden, um die Funktionalität von Y zu erhalten".

    das sind technische feinheiten. der entscheidende unterschied ist, dass man entweder eine kopie, oder eine option hat, den originalwert zu verändern. nichts anderes wollte der thread-starter wissen. ob nun eine konkrete programmiersprache 3 oder 35 verschieden möglichkeiten des referenzierens anbietet, ist doch völlig wumpe.
    🙂



  • muemmel schrieb:

    Hi,

    simon.gysi schrieb:

    muemmel schrieb:

    Hi,

    mal an einem anfassbaren Beispiel beschrieben.

    Wen Du ein paar Äpfel hast und Du fotografierst die oder machst Gipsabdrücke, die Du an die Funktion übergibst, dann ist das Call by Value. Dann kann die Funktion bewerten ob sie schön sind...

    Wenn aber die Äpfel geschält werden müssen, dann reicht weder ein Foto noch ein Abdruck, dann müssen die Äpfel selber rüber, Call by Referenz.

    Gruß Mümmel

    Naja, also ich weiss nicht so recht ob sowas überhaupt verglichen werden kann.
    Hilft den sowas? Kann mir nicht vorstellen, dass sowas hilft.
    Simon

    man muß halt die Leute da abholen wo sie herkommen. hier groß von Pointern und Referenzen zu reden hilft nicht übermäßig viel, wenn er noch überhaupt keinen blassen hat.

    Gruß Mümmel

    GENAU!



  • man muß halt die Leute da abholen wo sie herkommen. hier groß von Pointern und Referenzen zu reden hilft nicht übermäßig viel, wenn er noch überhaupt keinen blassen hat.

    Gruß Mümmel

    Wenn ihm das Basiswissen fehlt liegt es nicht an uns es ihm zu erklären, sondern er soll sich einen Artikel/ein Tutorial darüber durchlesen, er hat doch jetzt mehr als genug Stichworte und die Ausgangsfrage ist auch schon längst beantwortet.


Anmelden zum Antworten