Output aus Codefragmente herausfinden

K

kerstin1

Hallo!

Ich sollte durch überlegen herausfinden, welchen Output dieses Code-Fragment erzeugt und habe da meine Probleme.

Folgender Output ist gegeben:

C++:
 int doNonsens(signed char & a, int b)
{
static int i = 12;
a= b +2;
return a - i++;
}

int main ()
{
int i=0;
signed char b = 20;
for (; i<3; i++)
std::cout<<static_cast<int>(doNonsens(b,i)) << std::endl;
}

Als Lösung sollte
-10
-10
-10
herauskommen.

Leider hab ich in im Internet nicht sehr viel hilfreiches dazu gefunden und hoffe, dass ihr mir vielleicht helfen könntet, wie ich den Output des Codefragments am besten herausfinde.

Ich danke euch schon mal im Voraus für eure Bemühungen.
 
Hi und Willkommen bei tutorials.de,

das ist Handarbeit.
Befehl für Befehl durchgehen und aufschreiben,
welchen Wert die Variablen (i, b, und das static int i in der Funktion) danach haben.
Wenn du dich bei einem bestimmten Codeteil nicht auskennst: Welcher?
 
Naja in Zeile 12 habe ich

C++:
for (; i<3; i++)
Ich frage mich hier, was der ";" am Anfang bedeuten soll?

Und in Zeile 13 findet ja eine Typumwandlung statt, aber ich weiß nicht wie ich diese Codezeile interpretieren soll. Der Rest dürfte eigentlich kein Problem sein. Aber da ich keine Ahnung habe, wie ich dies Typumwandlung anwende, komm ich auch nicht auf die Lösung.
 
Normalerweise schaut eine for-Schleife so aus:
C++:
for ( Initialisierung; Bedingung; Aktion für jeden Durchlauf )
{
  // ...
}
In diesem Beispiel wurde einfach eine Initialisierung einer Variablen ausgelassen.
Du kannst auch so eine Endlosschleife (sofern kein "break" vorhanden ist) kreieren:
C++:
for ( ;; )
{
}

Zum static_cast: Der ist hier eigentlich sinnlos, da doNonsens bereits ein int zurückgibt.
 
Achso ja okay. Ich hatte irgendwie einen Denkfehler :) Bin jetzt nochmals alles Schritt für Schritt durchgegangen und bin nun auf die gesuchte Lösung gekommen. Danke.
 
Zurück