Cita de: Xenomorfo77 en 8 Octubre 2013, 16:16 PMEsa sentencia tiene dos problemas importantes.Código (cpp) [Seleccionar]*pointer++ = *pointer+POSITIONS-i-1;
...
2.- Al valor que haya en pointer le meto lo que haya en la ultima y despues se incrementa la posicion.
El primero es aplicar indirección y solo entonces sumar "POSITIONS-i-1", la sentencia termina procesada de esta forma:
Código (cpp) [Seleccionar]
*pointer++ = (*pointer) + POSITIONS - i - 1;
Cuando debería ser:
Código (cpp) [Seleccionar]
*pointer++ = *(pointer + POSITIONS - i - 1);
El otro se debe al uso del operador "++" y las dos instancias del objeto "pointer" en la expresión:
Código (cpp) [Seleccionar]
*pointer++ = *(pointer + POSITIONS - i - 1);
(1) (2) (3)
Es un problema porque los lenguajes C y C++ no definen el orden de evaluación de los operandos de una expresión. Dependiendo del orden en que estos se evalúen y el momento en que se aplique el efecto lateral del operador "++" se pueden obtener diferentes resultados.
Lo mejor aquí es seguir la recomendación de eferion evitando expresiones excesivamente complicadas.
Un saludo