Incrementar puntero entero con ++ en vez de +=

Iniciado por mester, 2 Enero 2016, 19:38 PM

0 Miembros y 1 Visitante están viendo este tema.

mester

Hola.

Como dice el título: ¿Cómo puedo incrementar un puntero con ++ en vez de +=1?
Por ejemplo:

void modificar(int *algo)
{
   *algo++;
   printf("%d\n",*algo);
}
int main()
{
   int cosa = 5;
   modificar(&cosa);
return 0;
}


Si escribo esto el programa me manda a la m*****. Sin embargo si lo hago así:

void modificar(int *algo)
{
   *algo+=1;
   printf("%d\n",*algo);
}
int main()
{
   int cosa = 5;
   modificar(&cosa);
return 0;
}


Me imprime un 6. ¿Esto a qué es debido? ¿Estoy incrementando mal el puntero?
Justicia es dar a cada uno lo que se merece

0xFer

*algo += 1; Incrementa el valor apuntado por el puntero( en este caso incrementa a la variable cosa).
*algo++; Incrementa la dirección del puntero( esto hace que se deje de apuntar a la dirección de la variable cosa).

Ahora si quieres usar ++ para incrementar el valor apuntado por el puntero entonces usa (*algo)++;
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

MAFUS

Es por la precedencia de los operadores. En tu caso lo que hacías era apuntar a una zona de memoria a la que el S.O. te deniega el acceso, incrementabas la dirección del puntero.
Usa parentesis para hacer lo que quieres, o varia la posición del ++, según como deba trabajar tu código en una sentencia compleja:
(*algo)++
o
++*algo
En una sentencia simple de incremento como la que buscas puedes usar la forma que quieras.

mester

Vale, gracias 0xFer y MAFUS, como siempre tú me resuelves las dudas de C.
No sabía que con los enteros el ++ también los movía de posición. Pensaba que era sin * cuando lo querías mover y tal.
Justicia es dar a cada uno lo que se merece