Seite 1 von 2

Hilfe zu Operatoren ++ und -- erbeten!!

Verfasst: Sa Jan 23, 2010 10:32 am
von dragonfloez
Hallo Leute ich bin gerade am C lernen und stehe bei den ++ und -- Operatoren auf dem Schlauch. Was genau ist nochmal der unterschied zwischen:


i++ Post Version und ++i Präversion????


Ich weiß das sie den Wert von i entweder um eins erhöhen oder um eins senken.

also wenn i=10 ist und dann ist doch ++i =11, bzw. --i =9, oder???

Für was braucht man das???

Vielen Dank für eure Hilfe!!

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

Verfasst: Sa Jan 23, 2010 10:47 am
von stampuhh
Es ist einfach kürzer als die lange Version

i = i + 1 oder i = i - 1. Außerdem spart man sich durch die Prä und Post-Version wieder Zeilen Code.

Bei Post wird erst der Wert verwendet und dann erhöht und bei Prä erst der Wert erhöht und dann verwendet.

Code: Alles auswählen

i = 0;
array[i++] = 5; // array[0] = 5
array[i] = 10; // array[1] = 10
array[++i] = 6; //array[2] = 6
gruß stampuhh

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

Verfasst: Sa Jan 23, 2010 4:55 pm
von Xin
dragonfloez hat geschrieben:Hallo Leute ich bin gerade am C lernen und stehe bei den ++ und -- Operatoren auf dem Schlauch. Was genau ist nochmal der unterschied zwischen:
i++ Post Version und ++i Präversion????
int i,jM
int j;

i = 1;
j = i++; // POST: Es wird erst der aktuelle Wert von 1 zurückgegeben und DANN erst um eins erhöht.
// Ab hier ist j == 1 und i == 2.

i = 1; // i ist wieder 1
j = ++i; // PRE: Es wird erst um eins erhöht und dann der aktuelle Wert von 2 zurückgegeben
// Ab hier ist j == 2 und i == 2

Solltest Du die freie Auswahl haben, ob Du i++ oder ++i schreiben kannst, dann gewöhne Dich an ++i.
In C++ (rate mal, wie der Name entstand...) ist ++C in der Regel eigentlich die bessere Option und daran kann man sich gleich mal gewöhnen.
dragonfloez hat geschrieben:Für was braucht man das???
Erstmal zum (Durch-)Zählen.

Dann unterscheiden insbesondere ältere Prozessoren zwischen INC (sehr schnell), ADDQ (add quick, nicht ganz so schnell) und ADD. Da sich i++ in C mit INC abbilden lässt und i += 1; eventuell auf ADD abgebildet wird, hatte es früher durchaus Sinn, zwischen i++ und anderen Varianten zu unterscheiden. Häufig ist i+=x; auch noch schneller als i = i + x; denn ein Compiler muss das nicht zwangsläufig optimieren können.

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

Verfasst: Sa Jan 23, 2010 8:23 pm
von dragonfloez
Hallo Leute,
vielen Dank für eure schnelle Hilfe. Sorry bin immer noch ein bischen kurzsichtig.

Also:

Code: Alles auswählen


#include <stdio.h>
int main()
{
int a=1, b=2;

........

if ( a++==1 )              /* Ist dann a=1 und wie oder warum wirkt sich das auf b aus? ist b dann 2? */
{.....}

return 0;
}
und

Code: Alles auswählen


#include <stdio.h>
int main()
{
int a=1, b=2;

........

if ( ++a==1 )              /* Ist dann a=2 und wie oder warum wirkt sich das auf b aus? ist b dann auch 2? */
{.....}

return 0;
}



Vielen Dank, bitte um Nachsicht

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

Verfasst: Sa Jan 23, 2010 8:32 pm
von nufan
Du liegst in beiden Fällen richtig. Aber wie kommst du darauf, dass sich das auf b auswirkt?

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

Verfasst: Sa Jan 23, 2010 8:39 pm
von dragonfloez
Hallo nufan,

mich hat nur das Verhältniss i und j unten etwas verwirrt. Wie gesagt habe erst begonnen mit Programmieren. ABER, was für ein Sinn verfolgt dann eigentlich i++??????

Xin hat geschrieben: int i,jM
int j;

i = 1;
j = i++; // POST: Es wird erst der aktuelle Wert von 1 zurückgegeben und DANN erst um eins erhöht.
// Ab hier ist j == 1 und i == 2.

i = 1; // i ist wieder 1
j = ++i; // PRE: Es wird erst um eins erhöht und dann der aktuelle Wert von 2 zurückgegeben
// Ab hier ist j == 2 und i == 2
[/quote]

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

Verfasst: Sa Jan 23, 2010 8:46 pm
von nufan
In diesem Beispiel weist du den Wert einer Variable der anderen zu. Da macht es natürlich einen Unterschied, ob du vorher oder nachher erhöhst.
dragonfloez hat geschrieben:was für ein Sinn verfolgt dann eigentlich i++?
Es gibt Fälle in denen du zuerst den alten Wert brauchst, den du danach aber erhöhen musst. Das hört sich vielleicht unnütz an, wirst du aber noch oft genug brauchen.

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

Verfasst: Sa Jan 23, 2010 9:04 pm
von dragonfloez
Hallo nufan oder an alle,

Also

Code: Alles auswählen

#include <stdio.h>
int main()
{
int a=1, b=2;

........

if ( a++==1 )              /* a=1*/
{.....}

printf ("%d", ++a + b);       /*ist dann das Ergebnis 4?? , da ++a=2 ist und b=2 ODER könnte ich da jetzt denn ++ weglassen um trotzdem den Wert a=2 zu erzeugen*/



return 0;
}


Vielen Dank

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

Verfasst: Sa Jan 23, 2010 9:32 pm
von nufan

Code: Alles auswählen

int a=1, b=2;
Du initialisierst die Variablen mit 1 und 2.

Code: Alles auswählen

if ( a++==1 )              /* a=1*/
a ist in dieser Bedingung noch 1, sofort danach wird auf 2 erhöht.

Code: Alles auswählen

printf ("%d", ++a + b);
Vor dieser Anweisung: a = 2, b = 2
Nun wird a sofort auf 3 erhöht und b (2) hinzugezählt -> Ausgabe ist 5.

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

Verfasst: Sa Jan 23, 2010 9:44 pm
von dragonfloez
Hallo,
dann ist also

Code: Alles auswählen



#include <stdio.h>
int main()
{
int a=1, b=2;

........

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  */
{.....}

.........
printf ("%d", a + b);       /*ist dann das Ergebnis 4 ???*/



return 0;
}

UND

Code: Alles auswählen






#include <stdio.h>
int main()
{
int a=1, b=2;

........

if ( ++a==2 )              /*jetzt und weiter unten im Programm  ist a=2; ALSO wird JETZT die if Anweisung ausgeführt */
{.....}

.........
printf ("%d", a + b);       /*ist dann das Ergebnis 4 ???*/



return 0;
}
Habe ich das so richtig verstanden?

Vielen Dank