++ Operator in for Schlaufe



  • Spielt es in der for Schlaufe keine Rolle, ob ich prä- oder postfix inkrementiere?

    for( int i = 0; i < 8; ++i )
    oder
    	for( int i = 0; i < 8; i++ )
    


  • Nein!

    Es spielt nur dann eine Rolle, wenn das Ergebnis des In- Dekrementoperators
    weiterverwendet wird, also.

    int i=42;
    int j=42;
    int k,m;
    
    k = i++;
    m = ++j;
    
    printf("%d:%d%n", k, m);
    

    liefert

    42 : 43



  • Doch, bei

    i++;
    

    wird im Gegensatz zu

    ++i;
    

    ein temporärer Integer erstellt. Also ist ein präfix ++ schneller.

    Greetz, Swordfish



  • Swordfish schrieb:

    Doch, bei

    i++;
    

    wird im Gegensatz zu

    ++i;
    

    ein temporärer Integer erstellt. Also ist ein präfix ++ schneller.

    Greetz, Swordfish

    😮 Wozu wird ein temporärer Integer erstellt 😮

    Also Compilerdesigner die heutzutage noch so eine simple
    Anweisung nicht optimieren, gehören in die Wüste geschickt.

    So etwas einfaches mußten sogar wir dummen Studies im
    Compilerbau-Praktikum erkennen (Stichwort: Flow-Chart)
    und wegoptimieren.



  • Swordfish schrieb:

    ...

    (1) unbegruendete annahme
    (2) wenn dem so /waere/, wuerde es jeder compiler optimieren



  • c.rackwitz schrieb:

    (2) wenn dem so /waere/, wuerde es jeder compiler optimieren

    Unbewiesene Behauptung!

    Du kennst ja nicht Swordfish's kleinen, aber feinen, Wald- und Wiesencompiler,
    den er sich im Keller zusammengestöpselt hat.

    😃



  • Javaner schrieb:

    Es spielt nur dann eine Rolle, wenn das Ergebnis des In- Dekrementoperators
    weiterverwendet wird, also.

    aber trotzdem geben beide schleifen...

    for (i = 0; i<8; i++)
     {
       printf ("%d \n", i);    
     }
    
     for (i = 0; i<8; ++i)
     {
       printf ("%d \n", i);    
     }
    

    0...7 aus. merkwürdig, oder? 😉



  • Der Ausdruck wird doch in der Klammer fertig ausgewertet.
    Also ist es egal.



  • 1310-Logik schrieb:

    Der Ausdruck wird doch in der Klammer fertig ausgewertet.
    Also ist es egal.

    falsche antwort 😞



  • net schrieb:

    1310-Logik schrieb:

    Der Ausdruck wird doch in der Klammer fertig ausgewertet.
    Also ist es egal.

    falsche antwort 😞

    😮

    Der Ausdruck ++i oder i++ wird nach jedem Durchlauf
    des Schleifenkörpers ausgewertet ==> Isse doch egal!



  • net schrieb:

    1310-Logik schrieb:

    Der Ausdruck wird doch in der Klammer fertig ausgewertet.
    Also ist es egal.

    falsche antwort 😞

    Sry. Und wie ist's richtig?



  • 1310-Logik schrieb:

    net schrieb:

    1310-Logik schrieb:

    Der Ausdruck wird doch in der Klammer fertig ausgewertet.
    Also ist es egal.

    falsche antwort 😞

    Sry. Und wie ist's richtig?

    Eben doch so, wie du es geschrieben hast.



  • Javaner schrieb:

    1310-Logik schrieb:

    net schrieb:

    1310-Logik schrieb:

    Der Ausdruck wird doch in der Klammer fertig ausgewertet.
    Also ist es egal.

    falsche antwort 😞

    Sry. Und wie ist's richtig?

    Eben doch so, wie du es geschrieben hast.

    nö, so wie du (javaner) es beschrieben hast.



  • Javaner schrieb:

    Der Ausdruck ++i oder i++ wird nach jedem Durchlauf
    des Schleifenkörpers ausgewertet ==> Isse doch egal!

    ich schrieb:

    Der Ausdruck wird doch in der Klammer fertig ausgewertet.
    Also ist es egal.

    😕
    nach != in ??? deswegen weinst Du?



  • 1310-Logik schrieb:

    nach != in ??? deswegen weinst Du?

    das *nach jedem schleifendurchlauf* ist entscheidend.



  • oder vereinfacht ausgedrückt...

    ++i
    i++
    

    Hier spielt die Reihenfolge ++i ungleich i++ eine Rolle, denn im ersten Fall wird der Wert des Operanden vor der Auswertung (z.B. einer Ausgabe) und im zweiten Fall nach der Auswertung erhöht

    🤡


Log in to reply