Bestimmung von Programmausschnitte
-
@Bushmaster
und so ist das richtig
https://ibb.co/0XXrM0Q
-
@dooni sagte in Bestimmung von Programmausschnitte:
@Bushmaster
und so ist das richtig
https://ibb.co/0XXrM0Qnein, das b=a kommt nach c=a++, also ist b=3, wenn a vorher 2 war.
-
@dooni sagte in Bestimmung von Programmausschnitte:
@Bushmaster
und so ist das richtigNein, denn:
@DirkB sagte in Bestimmung von Programmausschnitte:
Zudem werden die Anweisungen nacheinander ausgeführt.
wenn c = a++; ausgeführt wurde, dann ist a auf alle Fälle verändert. Welchen Wert hat aber a?Das b = a; kommt danach. Mit dem neuen Wert von a.
-
einfach folgendes merken: steht das ++ vor der variablen, wird sie zuerst hochgezählt und danach verwendet. steht das ++ dahinter, wird die variable erst verwendet und danach hochgezählt.
btw, was ist b hier?
a=1; b=a+++++a;
-
@Bushmaster
Also b nimmt den neuen Wert von a, wenn a um 1 steigt, dann ist b= a+1
-
@Bushmaster
a=1
c=++a => c=2
c=a++ =>c=1
habe ich es so richtig verstanden?
-
@dooni sagte in Bestimmung von Programmausschnitte:
@Bushmaster
Also b nimmt den neuen Wert von a, wenn a um 1 steigt, dann ist b= a+1und was ist mit +++a ?
-
@dooni sagte in Bestimmung von Programmausschnitte:
@Bushmaster
a=1
c=++a => c=2
c=a++ =>c=1
habe ich es so richtig verstanden?ja, so passt das.
-
@Bushmaster
Das weiß ich nicht
Ich bin noch eine Anfägerin
-
@Bushmaster sagte in Bestimmung von Programmausschnitte:
b=a+++++a;
das wäre b = a++ + ++a;
Da es aber undefiniert ist, wann a verändert wird (direkt vor/nach dem Zugriff oder erst wenn die Anweisung zu Ende ist (beim ; ) ist es vom Compiler/Version/System abhängig, was genau passiert.
-
@DirkB sagte in Bestimmung von Programmausschnitte:
Da es aber undefiniert ist, wann a verändert wird (direkt vor/nach dem Zugriff oder erst wenn die Anweisung zu Ende ist (beim ; )
das ist mies.
-
auch witzig (C++14 -Wall):
++a++; // compiler fehler, lvalue required as increment operand
aber das
(++a)++; // compiliert!
aber das nicht
(a++)++; // lvalue required as increment operand
und das auch nicht
++(a++); // lvalue required as increment operand
schon seltsam
-
Wieso ist das seltsam? Und
++a++
ist dasselbe wie++(a++)
.
-
@Bashar sagte in Bestimmung von Programmausschnitte:
Wieso ist das seltsam? Und
++a++
ist dasselbe wie++(a++)
.aber warum funktioniert '(++a)++'?
die klammern machen erst einen lvalue aus ++a, aber nicht aus a++.
(++(++a))++ funktioniert auch.
wenn a zuvor 1 war, ist es danach 4.
http://cpp.sh/
-
@Bushmaster
++a
ist ein lvalue, fertig. Wie kommst du darauf, dass die Klammern etwas damit zu tun haben? Das ist ja fast schon magisches Denken.Edit: Das ganze "funktioniert" damit noch lange nicht, es ist immer noch undefiniertes Verhalten.
-
@Bashar sagte in Bestimmung von Programmausschnitte:
++a ist ein lvalue, fertig. Wie kommst du darauf, dass die Klammern etwas damit zu tun haben?
also ist es ein fehler des compilers, dass er ++a++ ablehnt. oder was könnte das noch sein?
-
Wieso, "also"?
++a
kommt in++a++
nicht vor. Hatte ich schon gesagt, siehe oben.
-
@Bashar sagte in Bestimmung von Programmausschnitte:
Wieso, "also"?
++a
kommt in++a++
nicht vor. Hatte ich schon gesagt, siehe oben.dann sind die klammern doch wichtig, um den lvalue '++a' von '++a++' abzutrennen. irgendwie reden wir aneinander vorbei, so scheint es mir.
-
++a++
bedeutet in der C++-Syntax dasselbe wie++(a++)
. Wenn man also(++a)++
haben möchte, muss man das auch so schreiben. Vielleicht hast du einfach noch nie über Operatorenrangfolge und ähnliches nachgedachtMit lvalues hat das an sich nichts zu tun, außer dass natürlich
++a
ein lvalue ist unda++
nicht.
-
@Bashar sagte in Bestimmung von Programmausschnitte:
Vielleicht hast du einfach noch nie über Operatorenrangfolge und ähnliches nachgedacht Mit lvalues hat das an sich nichts zu tun, außer dass natürlich ++a ein lvalue ist und a++ nicht.
ich finde das ein bisschen undurchsichtig. gibt es einen grund dafür, wieso a++ kein lvalue ist?
++a = 2; // erst hochzählen, dann neu setzen ist okay a++ = 2; // erst neu setzen dann hochzählen aber nicht ???