Funktionen Parameterübergabe



  • Hallo zusammen,

    kann mir jemand den Unterschied, der verschiedenen Verfahren, derParameterübergabe anhand der Speicherbelegung der Übergabeparameter erklären. Wenn möglich mit Skizze

    Bis dann
    Incubus



  • was meinst du?

    call by reference VS call by value

    oder die einzelnen calling conventions
    stdcall, fastcall, cdecl,...



  • Hi, ich versuchs mal ohne Skizze,

    Ich habe mich jetzt mal darauf festgelegt, dass du die einzelnen Übergaben mit call by reference und call by value meinst und via Referenz, Zeiger oder Variable.

    es gibt 2 Verfahren, call by value und call by reference.

    void foo1(int pa)
    {
    }
    
    void foo2(int& pa)
    {
    }
    
    void foo3(int* pa)
    {
    }
    
    int main()
    {
    int a = 0;
    
    foo1(a);
    foo2(a);
    foo3(&a);
    
    return 0;
    }
    

    Damit haben wir schon einmal einen guten Überblick.
    foo1 arbeitet mit call by value, dabei wird der Wert a kopiert und an foo1 übergeben, dort ist pa eine völlig neue Variable, sie enthält aber den selben Wert wie a.
    Würde man pa in der Funktion ändern, hätte das keinerlei Ausweikungen auf a in der main.

    In foo2 haben wir nun eine Referenz.
    Wir übergeben a, aber die Referenz pa IST sozusagen a, nur mit einem anderen Namen.
    Wenn wir in foo2 nun den wert von pa ändern, ändert das auch den Wert von a.

    In foo3 übergeben wir die Adresse von a, der Zeiger ist eine Variable, die eine Adresse speichern kann.
    Dadurch können wir auch via call by reference wie bei foo2 arbeiten, allerdings können wir den zeiger hinterher auch noch afu andere Dinge zeigen lassen, wenn wir in foo3 den Wert von a ändern wollen, müssen wir *pa = 100 zeigen, der Stern bewirkt hier nur, dass wir nicht den Wert des Zeigers (der ja die Adresse ist) verändern, sondern das, worauf der zeiger zeigt, was ja a ist, somit ändern wir den Wert von a in der main.

    MfG MAV

    [ Dieser Beitrag wurde am 08.06.2003 um 14:48 Uhr von Mis2com editiert. ]


Anmelden zum Antworten