Hilfe zu Operatoren ++ und -- erbeten!!

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Hilfe zu Operatoren ++ und -- erbeten!!

Beitrag von Xin » Sa Jan 23, 2010 10:25 pm

Richtig verstanden.

Aber Achtung!

Code: Alles auswählen

int a = 1;
printf( "%d - %d - %d ", a++, a++, a++ );
printf( "=> %d\n", a )
ist nicht definiert!

Da kann 1 - 2 - 3 => 4 rauskommen. Es ist aber nicht ganz unwahrscheinlich, dass 1 - 1 - 1 => 4 rauskommt.
Die Inkrementoren und Dekrementoren sind in C nicht dafür gedacht, innerhalb von Ausdrücken mehrfach verwendet zu werden!
Wenn Du eine Variable mit ++ oder -- verändert hast, ist sie bis zum Semikolon undefiniert.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Hilfe zu Operatoren ++ und -- erbeten!!

Beitrag von nufan » Sa Jan 23, 2010 10:28 pm

Code: Alles auswählen

if ( a++==1 )              /*jetzt ist immernoch a=1, also wird die if Anweisung ausgeführt. Es wird aber bei der nächsten Verwendung von a weiter unten im Programm, a=2  */
Nur als Zusatz, weil es aus deiner Formulierung nicht klar erkennbar ist: Auch in den Anweisungen im if-Block ist a bereits 2. Lediglich in der ersten Bedingung ist es 1. Wären hier noch weitere Bedingungen, wäre dort a auch bereits 2.
Auch bei folgenden Bedingungen würde das if ausgeführt werden:

Code: Alles auswählen

int a = 1, b = 2;
if (a++ == 1 && a == 2)       // bei der 1. Bedingung ist a 1, bei der 2. bereits 2
{
// ...
}
// ...

dragonfloez
Beiträge: 92
Registriert: Fr Jan 22, 2010 1:49 pm

Re: Hilfe zu Operatoren ++ und -- erbeten!!

Beitrag von dragonfloez » Sa Jan 23, 2010 11:00 pm

Ihr seit echt spitze!!, ich habe es verstanden. :D

Man soll die gleichen Oppeeratoren ++ oder -- im selben Programm nicht mehrfach verwenden, zumindest nicht in dem gleichem Ausdruck.


a=1
++a erhöt den Wert von 1 auf 2 und wird sofort verwendet; also a=2.
a++ ist erst immernoch 1 (Definiert aber nachfolgende a mit 2) wird aber bei der nächsten Verwendung von a im Programm, in der gleichen Funktion oder nächsten Funktion zu 2. Dann ist a=2.



Oder hab ich noch was vergessen?

Vielen Dank

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Hilfe zu Operatoren ++ und -- erbeten!!

Beitrag von Xin » Sa Jan 23, 2010 11:36 pm

dani93 hat geschrieben:

Code: Alles auswählen

if (a++ == 1 && a == 2)       // bei der 1. Bedingung ist a 1, bei der 2. bereits 2
Bei der 2. ist es undefiniert. Es ist nicht festgelegt, wann ++ ausgeführt wird. Es gibt Compiler, die das erst nach Auswertung des Ausdrucks verrechnen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

dragonfloez
Beiträge: 92
Registriert: Fr Jan 22, 2010 1:49 pm

Re: Hilfe zu Operatoren ++ und -- erbeten!!

Beitrag von dragonfloez » Sa Jan 23, 2010 11:46 pm

Hallo,
ok ist gut zu wissen. Dann kann es in manchen Fällen sein das die Opperatoren ++ oder -- (Post Version) erst nach einem abgeschlossenen Ausdruck Anwendung finden könnten.


Nochmal Danke :D :D

Antworten