Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mester en 2 Enero 2016, 19:38 pm



Título: Incrementar puntero entero con ++ en vez de +=
Publicado por: mester en 2 Enero 2016, 19:38 pm
Hola.

Como dice el título: ¿Cómo puedo incrementar un puntero con ++ en vez de +=1?
Por ejemplo:
Código
  1. void modificar(int *algo)
  2. {
  3.   *algo++;
  4.   printf("%d\n",*algo);
  5. }
  6. int main()
  7. {
  8.   int cosa = 5;
  9.   modificar(&cosa);
  10. return 0;
  11. }

Si escribo esto el programa me manda a la m*****. Sin embargo si lo hago así:
Código
  1. void modificar(int *algo)
  2. {
  3.   *algo+=1;
  4.   printf("%d\n",*algo);
  5. }
  6. int main()
  7. {
  8.   int cosa = 5;
  9.   modificar(&cosa);
  10. return 0;
  11. }

Me imprime un 6. ¿Esto a qué es debido? ¿Estoy incrementando mal el puntero?


Título: Re: Incrementar puntero entero con ++ en vez de +=
Publicado por: 0xFer en 2 Enero 2016, 20:01 pm
*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)++;


Título: Re: Incrementar puntero entero con ++ en vez de +=
Publicado por: MAFUS en 2 Enero 2016, 20:02 pm
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:
Código
  1. (*algo)++
o
Código
  1. ++*algo
En una sentencia simple de incremento como la que buscas puedes usar la forma que quieras.


Título: Re: Incrementar puntero entero con ++ en vez de +=
Publicado por: mester en 2 Enero 2016, 20:07 pm
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.