Übungsaufgabe
-
Guten Tag,
ich habe ein Verständnisproblem bei folgender Übungsaufgabe:#include <iostream> using namespace std; int y = 1; int f1(int x) { y = y * 2; return y*x; } int f2(int *x) { int y = (*x) * 2; return y*(*x); } int main() { /*(1)*/ int y = f1(1); /*(2)*/ cout << y << endl; /*(3)*/ cout << f2(&y) << endl; /*(4)*/ cout << f1(1) << endl; /*(5)*/ cout << y << endl; _getch(); return 0; }
Benötigt werden Erklärungen bzw. Ausgaben für die Punkte 1-5.
Mein Verständnisproblem liegt nun im Punkt (5) welcher "2" ausgibt.
Meine Lösung war 8, weil ich davon ausgegangen bin das bei y = y * 2 y (global) der Wert 4 zugewiesen wird, daher meine Frage:
Warum wird y in der Funktion f1 kein neuer Wert zugewiesen, obwohl y doch global ist?
In der Funktion f2 hatte ich mir das so erklärt das durch das int eine neue lokale y Varibale deklariert wurde, aber das ist in f1 ja nicht der Fall.Gruß Tim0
-
-
Hoppla, da sollte ein "für" zwischen, also:
Meine Lösung war 8, weil ich davon ausgegangen bin das bei y = y * 2, für y (global), der Wert 4 zugewiesen wird, daher meine Frage:
-
@tim0 sagte in Übungsaufgabe:
Meine Lösung war 8, weil ich davon ausgegangen bin das bei y = y * 2, für y (global), der Wert 4 zugewiesen wird, daher meine Frage:
Daher deine Frage: [Doppelpunkt][Nichts]
@tim0 sagte in Übungsaufgabe:
daher meine Frage:
Warum wird y in der Funktion f1 kein neuer Wert zugewiesen, obwohl y doch global ist?y
wird in der Funktionf1()
ein Wert zugewiesen.
-
Aber sollte das Ergebnis für Punkt (5) dann nicht "4" sein?
y würde bei Punkt (1) zunächst durch "y = y * 2" der Wert 2 zugewiesen werden, da y mit 1 initialisiert wurde,
also y = 1 * 2.
Anschließen wird y in der main Funktion der return-Wert yx also 21 zugewiesen, also ebenfalls 2.
Da y in der Funktion f2 lokal ist hat diese keinen Einfluss.
ind Punkt (4) wird wieder f1(1) aufgerufen, diesmal wird der return-Wert aber nicht y zugewiesen.
y = y * 2 wäre nun also y = 2 * 2, damit wäre y = 4. Ausgegeben wird in Punkt (4) der return-Wert mit xy also 14.
In Punkt (5) wird y aber mit 2 ausgegeben.Gruß Tim0
-
@tim0 sagte in Übungsaufgabe:
also 21 zugewiesen
die 21 scheidet völlig aus!
int main() { /*(1)*/ int y = f1(1); // global y = global y * 2 = 1 * 2 = 2 --> global y = 2 // local y = global y * x = 2 * 1 = 2 /*(2)*/ cout << y << endl; // local y = 2 /*(3)*/ cout << f2(&y) << endl; // function local y = 2 * 2 = 4 // returns 4 * 2 = 8 /*(4)*/ cout << f1(1) << endl; // global y = y * 2 = 2 * 2 = 4 // returns 1 * 4 = 4 /*(5)*/ cout << y << endl; // local y is still 2 }
-
ich hab da auch Verständnisprobleme. Ich würde erstmal alles mit sinnvollen Bezeichnern ausstatten. Keiner nennt ungestraft alles nur x, y und fn und blickt eine Woche später noch durch.
-
Hallo Tim0,
es wird
2
ausgegeben, weil diesesy
die lokale Variable von Zeile/*(1)*/ int y = f1(1)
benutzt.
Wenn ducout << ::y << endl; // beachte den Doppelpunkt, d.h. globaler Scope
ausgibst, dann wird auch
4
ausgegeben, s.a. Ideone-Code !
-
Danke schön, ich habe es nun verstanden.
Gruß Tim0