Allora
come contatore in un ciclo for ++i e i++ sono equivalenti, ma in generale le due formulazioni non sono equivalenti prova a far girare questo programma e vedi la differenza :
#include <stdio.h>
int main(int argc, char **argv)
{
int i ;
int z = 0;
int x ;
int y ;
printf ("Preincremento i :\n") ;
for ( i = 0 ; i <= 10 ; ++i) {
printf("%d ", i ) ;
}
printf ("\n\n") ;
printf ("Postincremento i :\n") ;
for ( i = 0 ; i <= 10 ; i++) {
printf("%d ", i ) ;
}
printf ("\nPreincremento z :\n") ;
for ( i = 0 ; i <= 10 ; i++) {
x = ++z ;
printf("z = %d e x = %d\n ", z , x ) ;
}
printf ("\n") ;
z = 0 ;
printf ("\nPostincremento z :\n") ;
for ( i = 0 ; i <= 10 ; i++) {
y = z++ ;
printf("z = %d e y = %d\n ", z , y) ;
}
printf ("\n\n") ;
return 0;
}
come vedrai i come contatore rimane uguale sia nel pre che ne post incremento.
ma se lo mettiamo all'interno di una qualche espressione la differenza è "notevole" :
Preincremento i :
0 1 2 3 4 5 6 7 8 9 10
Postincremento i :
0 1 2 3 4 5 6 7 8 9 10
Preincremento z :
z = 1 e x = 1
z = 2 e x = 2
z = 3 e x = 3
z = 4 e x = 4
z = 5 e x = 5
z = 6 e x = 6
z = 7 e x = 7
z = 8 e x = 8
z = 9 e x = 9
z = 10 e x = 10
z = 11 e x = 11
Postincremento z :
z = 1 e y = 0
z = 2 e y = 1
z = 3 e y = 2
z = 4 e y = 3
z = 5 e y = 4
z = 6 e y = 5
z = 7 e y = 6
z = 8 e y = 7
z = 9 e y = 8
z = 10 e y = 9
z = 11 e y = 10