Funktionen
-
Hallo, da bin ich wieder...
ich habe eine Funktion geschrieben:double summe(double zahl_1, double zahl_2) { erg = zahl_1 + zahl_2; return erg; }
Wenn ich die Funktion aufrufe, warum kann ich dann andere Zeichen eingeben als zahl_1 und zahl_2 ??? Also ich meine das so:
int main() { double x = 5.4; double y = 4.6; summe(x, y); //Aufruf der Funktion ... ... ... return 0; }
Warum weiß der Compiler, das die erste Variable (also x) zu "zahl_1" gehört und die zweite Variable (also y) zu "zahl_2" gehört??? Hat das irgendwas mit der Reihenfolge der Argumente zu tun???
Mich macht das alles genz verwirrt...Ciao
euer zocker001
-
Hallo,
zahl_1 und zahl_2 haben mit x und y rein gar nichts zu tun. Sie sind lokal zur
Funktion deklariert. Mit dem Aufrufsumme(x, y);
Uebergibst du der Funktion fuer den ersten Parameter (zahl_1) x und fuer den
zweiten Parameter (zahl_2) y. Ab diesem Zeitpunkt arbeitest du in der Funktion
mit Kopien von x und y.mfg
v R
-
Ahhhh, ich glaub ich hab's verstanden (
)
Ich hab hier noch ne Frage:
Kann ich mehrere Return-Anweisungen ausführen, also z.B.:Funktion ??? { .... .... return a; return b; }
Geht das irgendwie in ähnlicher Weise???
Danke für die Erklärung...
Ciao,
euer zocker001
-
Nein, dass geht nicht.
Es gibt nur einen Rückgabewert, da du das Ergebnis einer Funktion, ja auch
nur einer Variable direkt zuweisen kannst.int ergebnis = funktion();
Du kannst aber trotzdem mehrere returns haben, von denen aber nur eines
ausgeführt wird. Beispiel:int a(int b) { if(b==5) return 1; else return 0; }
In diesem Beispiel gibt es zwar zwei returns, aber nur eines von beiden kann
ausgeführt werden.
-
Du meinst dass du mehrere Werte zurückgeben kannst ?
Also grundsätzlich kannst du soviele returns hintereinander schreiben wie du willst. Es wird aber immer nur das erste wirklich zu einem Rücksprung in die aufrufende Funktion führen. Die anderen werden nicht abgearbeitet.
Wenn du mehrere Wertr zurück geben willst hast du mehrere Möglichkeiten.
- Du gibst ein Array zurück
- Du gibst eine Struktur zurück
- Die verwendest als Parameter nonconst-referenzen für die Ergebnisse, und weist die Ergebnisse zu.
Hab ich irgendwas vergessen ?
Wenn es nur 2 Werte sein sollen eigenet sich wohl std::pair ganz gut, wenns mehr sind evtl. boost::tuple oder eben std::vector, std::list oder was auch immer.
-
OK, vielen Dank für den Tipp...
Und noch ne Frage:
Was sind eigendlich Default-Marken (ich hab nur mal etwas davon gehört, weis aber nich, was ich damit anstellen kann)???Ciao
zocker001
-
zocker001 schrieb:
Was sind eigendlich Default-Marken (ich hab nur mal etwas davon gehört, weis aber nich, was ich damit anstellen kann)???
Marke == Label?
Das ist der Zweig einer switch-Anweisung, der abgearbeitet wird, wenn keiner der case-Zweige zutrifft:
switch (a) { case 1: cout << "eins"; break; case 2: cout << "zwei"; break; default: cout << "weder eins noch zwei"; break; };
-
prolog:
Erstmal Danke für die Tipps, aber leider verstehe ich von Array's (das ist doch das mit den eckigen Klammern [], oder), Strukturen, Vektoren oder was auch immer überhaupt nichts. Ich lern gerade mal eigene Funktionen zu schreiben (das Beispiel ganz ganz oben mit der Funktion summe() war nur ne Übung).
Sorry, ich hoffe du bist mir nicht böse.
by
zocker001
-
Nö, warum sollte ich deswegen böse sein ???
Naja nun ists ja geklärt.
-
Bashar:
?!?!
??!: Ähm, ich glaub ich bring da irgendwas durcheinander. Ich meine in Bezug auf Funktionen. Gibt es da nicht irgendwelche Default-Marken oder sowas ähnliches???
-
zocker001 schrieb:
Bashar:
?!?!
??!: Ähm, ich glaub ich bring da irgendwas durcheinander. Ich meine in Bezug auf Funktionen. Gibt es da nicht irgendwelche Default-Marken oder sowas ähnliches???
Du meinst vielleicht Default-Werte?
Das wäre dann so:
int funktion(int a, int b=5) { [...] }
Jetzt kann man, muss man aber nicht(!), einen Wert für b angeben, wenn man die
Funktion aufruft. d.h., du kannst sowohlfunktion(eine_zahl)
als auch
funktion(eine_zahl, andere_zahl)
schreiben. Wenn du b nicht angibst wird automatisch b=5 gesetzt (s. oben)
-
Das sind dann Default-Argumente
-
EDIT: Zu spät, aber nur ca. 4,5 Stunden.