Test Foro de elhacker.net SMF 2.1

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:

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?
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:
(*algo)++
o
++*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.