Bestimmung von Programmausschnitte
-
@dooni sagte in Bestimmung von Programmausschnitte:
ist a nicht eine Kopie von x?
Eine Kopie ist ein anders Teil, das wie das (derzeitige) Original aussieht.
Du kannst die Kopie verändern, das wirkt sich nicht auf das Original aus.
Du kannst das Original verändern, das wirkt sich nicht auf die Kopie aus.Darum macht man ja Kopien. Ein Backup ist ja auch nichts anderes.
-
@DirkB
Also a wird sowohl in der erste als auch in der zweite sich nicht ändern
-
@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.