Übergabe an Funktionen



  • Hallo zusammen,

    und zwar wollte ich mal nachfragen, welche Art der Übergabe von Variablen bevorzugt verwendet werden sollte. CallByValue, CallByReference oder CallByPointer? Mir ist klar, dass es auch auf den Anwendungsfall ankommt. Aber gehen wir einfach mal davon aus, es ist egal, weil zum Beispiel in der Funktion einfach nur ein Wert halbiert wird. Welche Art der Übergabe sollte ich künftig dafür nutzen, wenn ich die Wahl habe?



  • Denke darüber nach, was bei der Übergabe passiert, dann kannst du dir die Frage selbst beantworten.



  • Bei CallByValue wird eine Kopie der Variable erstellt. Somit wird vermutlich mehr Speicher benötig als bei den anderen beiden Arten. Ich habe gelesen, dass man Zeiger nur benutzen sollte wenn es keine besseren Alternativen gibt. Daher würde ich persönlich, wenn ich die freie Auswahl hätte, CallByReference benutzen.

    Das wäre so meine Theorie zu dem Thema. Bin mir aber nicht sicher ob ich da richtig liege



  • Bei call by reference muss ja auch irgendwo die Adresse vom Objekt abgspeichert werden.
    Also wird Speicherplatz von einem Zeigertyp gebraucht.

    Zudem läuft der Zugriff auf das Objekt indirekt (Zugriff über den Adressspeicher auf das Objekt)

    Die ersten Parameter werden, soweit es geht, beim Aufruf auch in Registern gehalten.



  • CallbyValue bei zB Rechenoperationen, wo einer Variable ein Wert zugewiesen wird.

    CallbyReference bei "ausführenden" Funktionen, die nichts zurückgeben sollen, in denen aber ein veränderter Wert weitergeführt werden soll.

    Denke ich so.



  • lemon03 schrieb:

    CallbyValue bei zB Rechenoperationen, wo einer Variable ein Wert zugewiesen wird.

    CallbyReference bei "ausführenden" Funktionen, die nichts zurückgeben sollen, in denen aber ein veränderter Wert weitergeführt werden soll.

    Denke ich so.

    Denk nochmal.

    Call by Value ist die "normale" Übergabe.
    Es wird eine Kopie von dem Wert angelegt.
    Somit sind die Werte in der aufgerufenen Funktion von der rufenden Funktion entkoppelt.

    Call by Reference wird die Adresse von dem Objekt übergeben. Somit kann die aufgerufenen Funktion das Objekt verändern.


Log in to reply