PDA

View Full Version : [C] Che differenza c'è tra "++i" e "i++"?!


Matrixbob
24-04-2007, 09:17
Non dovrebbe essere proprio la stessa cosa, magari come side effect a volte lo è, ma non mi pare sia la stessa cosa.

Ad esempio se ho "i++" in 1 test significa che prima valuta i nel test e dopo lo incrementa, mentre se avesse "++i" nel test allora prima incrementa i e poi lo valuta nel test?!
:mc:

Mixmar
24-04-2007, 10:27
Non dovrebbe essere proprio la stessa cosa, magari come side effect a volte lo è, ma non mi pare sia la stessa cosa.

Ad esempio se ho "i++" in 1 test significa che prima valuta i el test e dopo lo incrementa, mentre se avesse "++i" nel test allora prima lo incrementa e poi valuta i?!
:mc:

:mano: Proprio come hai detto! :)

Matrixbob
24-04-2007, 10:36
:mano: Proprio come hai detto! :)

Ho editato, forse adesso è + precisa la mia definizione.

Ma quindi la differenza sta solo nei test?
Tutto li?

Ziosilvio
24-04-2007, 10:39
In entrambi i casi il valore della variabile i viene incrementato di uno.

Il valora dell'espressione, invece, corrisponde al vecchio valore di i nel caso di i++, e al nuovo valore di i nel caso di ++i.

Ovviamente, gli operatori di decremento i-- e --i si comportano in modo simile.

cionci
24-04-2007, 10:47
C'è questa differenza:
i = 1;
a = i++; <--- a == 1

i = 1
a = ++i; <--- a == 2

Matrixbob
24-04-2007, 10:50
C'è questa differenza:
i = 1;
a = i++; <--- a == 1

i = 1
a = ++i; <--- a == 2

Ma se in 1 ciclo While devo incremetare un indice allora fare ++i o i++ non fa differenza vero?!

cionci
24-04-2007, 10:55
Se scrivi cosi:

++i;
o
i++;

Non fa alcuna differenza...c'è la diffusa credenza che ++i sia più performante vedendo la traduzione assembler...ma credo che con i moderni compilatori e le moderne frequenze delle CPU la differenza sia impercettibile...

Matrixbob
24-04-2007, 11:38
Se scrivi cosi:

++i;
o
i++;

Non fa alcuna differenza...c'è la diffusa credenza che ++i sia più performante vedendo la traduzione assembler...ma credo che con i moderni compilatori e le moderne frequenze delle CPU la differenza sia impercettibile...

Ma poi i compilatori ormai hanno tecniche di ottimizzazione del codice mi pare.
Magari vengono tradotti entrambi nella stessa cosa IMHO.

cionci
24-04-2007, 11:41
Magari vengono tradotti entrambi nella stessa cosa IMHO.
L'incremento su linea singola probabilmente sì ;)

wingman87
24-04-2007, 13:15
Ma se in 1 ciclo While devo incremetare un indice allora fare ++i o i++ non fa differenza vero?!
se i è la variabile di controllo e usi ++i nel controllo tipo:
while(++i<n)
allora il ciclo viene eseguito una volta di meno rispetto a se usi
while(i++<n)

Matrixbob
24-04-2007, 18:47
se i è la variabile di controllo e usi ++i nel controllo tipo:
while(++i<n)
allora il ciclo viene eseguito una volta di meno rispetto a se usi
while(i++<n)

Si infatti è come dicevamo noi sopra.
i++ prima viene valutata i e poi viene incrementata.
Isolata invece è =.