In einer Aufgabe sollen wir beantworten was dieser Code ausführt, die Funktionen sind absichtlich nicht kennbar bezeichnet.
1. Einlesen einer Zahl a und Ausgabe ihrer Quadratzahl a^(2)
2. Einlesen zweier Zahlen a,b und Ausgabe des Produkts a*b
3. Undefiniert.
4. Einlesen zweier Zahlen a,b und Ausgabe der Zahl b
Ich weiss dass die Lösung die 2. Antwort ist.
Aber wie wird der Code gelesen ?
Code:
#include <iostream>
int i () {
int x;
std::cin >> x;
return x;
}
int f (int x) {
return i () * x;
}
int main () {
std::cout << f (i());
return 0;
}
Meine Idee
1. Main
Ich gehe in die main-Funktion und siehe dass die Funktion f aufgerufen wird.
Die Funktion wird aber mit einem Argument aufgerufen, das wiederum eine Funktion ist. Also i()
2. In der Funktion i()
Wenn ich dann direkt oben im Code zur Funktion i() gehe, wird dort eine Variabel x definiert und anschliessend vom Nutzer eingelesen und so returnt.
Sagen wir allgemein: die Funktion i() returnt den Wert x.
3. Zurück im Main
Jetzt wird der Aufrufer f( i() ) zu f ( x ).
Ich gehe also nach oben zur Funktion f.
4. In der Funktion f
Hier wird der Wert i() * x returnt, da wir x bereits evaluiert haben, wird x von Schritt 2 verwendet.
Aber vorher noch wird ein zweites mal die Funktion i() aufgerufen und eine zweite Zahl x eingelesen.
Die Zahl muss nicht geleich sein wie das x von der ersten Eingabe des Nutzers.
Frage
Hier, bei Schritt 4, bin ich extrem unsicher.
Ich glaube ohne die Lösung zu wissen, hätte ich sie falsch beantwortet.
Ich frage mich, wieso ändert sich nach der zweiten Eingabe von x nicht auch das x, was in der ersten Eingabe gemacht wurde.