int j = ++ i; // Incrementar i en 1, y asignar el resultado a j, o en otras palabras, calcular ++ i primero, luego asignar
int k = i ++; // Calcular la asignación primero, asignar el valor de i a k, originalmente era 3, asigne 3 a k, y luego i incrementa en 1, i se convierte en 4,
por lo que:
i = ++ i; es equivalente a las siguientes dos declaraciones (se produce una advertencia durante la compilación, que es lo mismo que i = i; advertencia) :
i=i+1;
i=i;
i = i ++; es equivalente a las siguientes tres declaraciones:
int tmp = i;
i = i + 1;
i = tmp;