DOMANDA Pre/post incremento nel ciclo for

Pubblicità

ilfe98

Utente Èlite
Messaggi
3,083
Reazioni
1,317
Punteggio
134
Salve ragazzi, ho ben chiara la differenza di pre e post incremento(non è che ci sia molto da capire).Tuttavia studiando dagli esercizi del prof ho notato una stranezza...L'esercizio chiede di scambiare i dati di una matrice di due colonne prese in input...Per accedere ai dati ho pensato una formula che è
C:
 r*cols+c1
in pratica accedo all'elemento della riga r della colonna c1.Per scorrere gli elementi ho pensato ad un ciclo
C:
for(size_t i=0;i<rows;i++)
e faccio il classico swap.Tuttavia non l'ho ancora testato ho controllato le soluzioni del prof ed è tutto identico eccetto che invece di i++ ha usato ++i...In questo momento mi è sorto un dubbio teoricamente per la definizione del for non ci dovrebbe essere differenza nel pre e post poiché incrementa tutto dopo il ciclo di istruzioni? oppure mi sbaglio e quindi l'indice parte direttamente da 1?
Se così fosse la formula che ho pensato non vale più ed inoltre non potrei accedere all'elemento nella riga 0 sbaglio?
 
il i++ oppure ++i viene sempre valutato quando raggiungi la fine del blocco for o usi la keyword continue, quindi non c'è differenza :)
Stessa cosa se fai
C++:
while(i < 5)
{
    //...cose

    i++; //oppure ++i
}

ed inoltre, puoi scrivere un while(true) loop in termini di un for loop (non centra nulla, ma te lo dico lo stesso xD)
Codice:
for(;;)
{
    //loop infinito
}
 
... teoricamente per la definizione del for non ci dovrebbe essere differenza nel pre e post poiché incrementa tutto dopo il ciclo di istruzioni? ...
Non ti sbagli. C'e' differenza nel pre e post incremento solo quando viene usato il valore della variabile. In questo caso viene incrementata (o decrementata) e basta.
Casi come questo invece sono ambigui:
Codice:
i = i++ + i++;
hai risultati diversi a seconda del compilatore (in quanto non esiste una regola standard). Per questo motivo per sicurezza occorre sempre usare solo un auto incremento (o decremento) per ogni istruzione. Anzi, non usarli per nulla quando l'espressione e' complicata, perche' funzionera' solo in quella specifica condizione: saranno dolori se poi vorrai cambiare algoritmo (e ti assicuro, capita piu' spesso di quanto si pensi)
 
Pubblicità
Pubblicità
Indietro
Top