======Funktionsargumente======
=====Was ist das?=====
Funktionsargumente sind Werte, die man einer Funktion "mit auf den Weg geben" kann, um das Ergebnis der Funktion zu verändern. Funktionsargumente werden auch Parameter genannt.
Einen grundlegenden Einblick in Parameter bekommt man im Kapitel [[c:func:start#parameter|Funktionen]] unter der Überschrift "Parameter".
=====Übergabekosten=====
====Wie bitte?====
Ja, genau: Kosten. Es ist natürlich nicht "umsonst", Argumente an eine Funktion zu übergeben. Keine Angst, es kostet natürlich kein Geld. Nun kommt die Frage auf: Was kostet es denn dann?
Um diese Frage zu beantworten, müssen wir erst einmal verstehen, was genau Parameter denn nun sind. Gibt es unterschiedliche Formen von Parametern?
Ein einfaches Beispiel:
int add(int a, int b)
{
return (a+b);
}
Nun rufen wir unsere simple Funktion ersteinmal auf:
int nr_1 = 5;
int nr_2 = 12;
add(nr_1,nr_2);
Nun die Frage, was passiert hierbei?
Hier die Antwort:
Beim Aufruf der Funktion //add// werden die Werte der beiden Variablen //nr_1// und //nr_2// an die Funktion übergeben. Dabei werden die Werte aus den Speicherstellen, die durch die Variablen definiert sind in neue, extra für die Funktion //add// bereitgestellte Speicherbereiche kopiert.
Jawohl, **kopiert**.
Diese Übergabe der Funktionsargumente nennt man __**Call by Value**__.
Das ist an sich genommen nichts schlimmes.
Es werden dann eben (je nach Computer) 4 oder 8 Byte mehr Speicher benötigt.
Es kann aber zu Problemen führen, wenn wir nicht nur 2 Integer-Variablen an eine Funktion übergeben, sondern beispielsweise ein [[c:array|Array]] von 2000 Integer-Variablen.
Übergeben wir ein solches Array wie unsere beiden Variablen, dann benötigen wir bis zu 8000 Byte mehr Speicher.
\\ Wie man dieses Problem löst, wird im nächsten Kapitel ([[c:func:callbyreference|Referenzparameter]]) erklärt.
//Noch nicht fertig// FIXME
----
Diskussion: http://proggen.org/viewtopic.php?f=39&t=223