uzti wrote:
> Danke für deine Antwort.
> Hab da gleich mehrere Fragen.
> 1. Wiso deklarierst du denn Prototyyp als void?
Weil die Funktion, so wie sie jetzt ist, keinen Rückgabewert hat, also
eine void Funktion ist. Und Prototyp und tatsächliche Funktion müssen
übereinstimmen.
> 2. Beim Aufruf der Funktion wird i dann der Rückgabewert?
Nein.
Der momentane Wert von i wird in die Funktion hinein übergeben und wird
zum Inhalt der Variablen arg innerhalb der Funktion.
> In der
> Funktion steht ja garnix drin?
> foo( i );
Das ist ja auch der Aufruf der Funktion.
> 3. In der httpd.c muss ich dann mit arg arbeiten oder? Weil i vorher
> übergeben wurde?
Der Wert wird aus i entnommen und an die Funktion übergeben. Übergeben
wird er, in dem innerhalb der Funktion eine neue Variable 'arg' erzeugt
wird, die diesen Wert beim Funktionsaufruf zugewiesen bekommt. 'arg'
existiert nur, solange die Funktion läuft. Sobald die Funktion fertig
ist und der Rücksprung zum Aufrufer erfolgt, verschwindet 'arg' wieder.
i und arg haben absolut nichts miteinander zu tun, ausser das beim
Aufruf der Funktion der momentane Wert von i genommen wird und als
Initialwert von arg benutzt wird. Das ist auch gut so, denn damit wird
die Funktion unabhängig von den Variablen des Aufrufers.
Stell dir einfach mal vor, du brauchst eine Funktion, die immer das
doppelte eines Wertes liefert.
1 | int twice( int Wert )
|
2 | {
|
3 | return 2 * Wert;
|
4 | }
|
Da 'twice' nichts über die Variablen des Aufrufers wissen muss, kannst
du die Funktion jetzt mit allem Möglichen aufrufen, solange es nur ein
int ist.
1 | int twice( int Wert ); /* Prototyp */
|
2 |
|
3 | int main()
|
4 | {
|
5 | int i, j;
|
6 |
|
7 | i = 5;
|
8 |
|
9 | j = twice( i ); // j wird 10, weil i den Wert 5 enthält
|
10 | j = twice( 5 ); // j wird ebenfalls 10, weil das doppelte von 5 -> 10
|
11 | j = twice( 3 * i ); // 3 * i ergibt 15, das doppelte von 15 -> 30
|
12 | j = twice( 3 * ( i + 2 ) ); // 5 + 2 -> 7, 3 * 7 -> 21, das doppelte davon -> 42
|
13 | ...
|
14 | }
|
(Hier wurde der Returntyp der Funktion auf int gesetzt, eben weil die
Funktion einen int returniert)