Hilfe zu Operatoren ++ und -- erbeten!!

Schnelle objektorientierte, kompilierende Programmiersprache.
dragonfloez
Beiträge: 92
Registriert: Fr Jan 22, 2010 1:49 pm

Hilfe zu Operatoren ++ und -- erbeten!!

Beitrag von dragonfloez » Sa Jan 23, 2010 10:32 am

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!!

Benutzeravatar
stampuhh
Beiträge: 211
Registriert: Sa Nov 07, 2009 4:39 pm
Wohnort: Paderborn

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

Beitrag von stampuhh » Sa Jan 23, 2010 10:47 am

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
NachDenkSeiten.de

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 4:55 pm

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.
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 8:23 pm

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
Zuletzt geändert von dragonfloez am Sa Jan 23, 2010 8:33 pm, insgesamt 1-mal geändert.

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 8:32 pm

Du liegst in beiden Fällen richtig. Aber wie kommst du darauf, dass sich das auf b auswirkt?

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 8:39 pm

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]

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 8:46 pm

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.

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 9:04 pm

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

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 9:32 pm

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.

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 9:44 pm

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

Antworten