Principio en C

Marius
13 de Agosto del 2005
Tal vez paresca tonto pero es que no entiendo cual es el significado de anteceder con el operador ++ una variable, supongamos que tengo una variable llamada i y hago esto:

for(i = 0; i < CARTAS; i++) // Incrementa i en uno

pero esta que hace:

for(i = 0; i < CARTAS; ++i) // Sera lo mismo?

Agradecere sus respuestas por que el libro que compre no la trae y lo aplique en un programita y dan lo mismo, luego quiero saber que utilidad tiene, saludos.

Caiman
13 de Agosto del 2005
Bueno no significan lo mismo, es verdad que incrementan en uno en ambos casos pero lo que cambia es el tiempo en que lo hacen.

for(i = 0; i < CARTAS; i++) // Incrementa i en uno
//dentro del ciclo vale cero y para la siguiente vuelta el valor será incrementado en uno e "i" valdrá uno

for(i = 0; i < CARTAS; ++i) // Sera lo mismo?
//dentro del ciclo "i" vale uno ya que el incremento se hizo antes de la primera vuelta y en la siguiente vuelta "i" valdrá dos.

hiei
13 de Agosto del 2005
El i++ se llama post incremento, esto es, se usa el valor de i y LUEGO se incremente, mientras que ++i es al revez, primero se incrementa y LUEGO se usa el codigo (incrementado)
El efecto neto de esto solo se nota en una exprecion compleja tipo:
i=0;
while (i++<100);
o
i=0;
while (++i<100);
Que hacen cosas distintas (El primero termina con i en 101 mientras que el segundo con i en 100 exactamente...)

Por eso el ejemplo del for es erroneo (aunque se enseña en muchas partes como algo valedero, pero cuando se intenta hacer no es asi)
En el ejemplo que diste es lo mismo el post incremento (i++) que el pre incremento (++i) porque el estandar ANSI C "desenrolla" el for como sigue:
Con for:
for (i=0; i<n; i++) // o ++i
codigo
Dsenrollado:
i=0;
while (i<n) {
codigo
i++; // o ++i
}
Como se vera el pos/pre incremento (decremento) no tiene efecto alguno sobre el codigo del bucle interno pues el i++ (++i) es una centencia independiente que siempre ocupa el mismom lugar en el codigo independientemente de la evaluacion que se haga... se puede poner solo porque el for del C acepta cualquier tipo de instrucciones alli.