elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Incrementar puntero entero con ++ en vez de +=
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Incrementar puntero entero con ++ en vez de +=  (Leído 2,515 veces)
mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
Incrementar puntero entero con ++ en vez de +=
« 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?


En línea

Justicia es dar a cada uno lo que se merece
0xFer


Desconectado Desconectado

Mensajes: 401



Ver Perfil
Re: Incrementar puntero entero con ++ en vez de +=
« Respuesta #1 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)++;


En línea

Código
  1. int getRandomNumber(){
  2.    return 4; //chosen by fair dice roll
  3.              //guaranteed to be random
  4. }
MAFUS


Desconectado Desconectado

Mensajes: 1.547



Ver Perfil
Re: Incrementar puntero entero con ++ en vez de +=
« Respuesta #2 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.
En línea

mester

Desconectado Desconectado

Mensajes: 219


https://www.youtube.com/watch?v=IlY9C6pzxKc


Ver Perfil WWW
Re: Incrementar puntero entero con ++ en vez de +=
« Respuesta #3 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.
En línea

Justicia es dar a cada uno lo que se merece
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
incrementar de esta manera -->
.NET (C#, VB.NET, ASP)
brenda hg 5 2,932 Último mensaje 23 Febrero 2008, 02:37 am
por Hadess_inf
[PHP + MYSQL] Incrementar valor de un INT
PHP
Alex_bro 2 13,057 Último mensaje 28 Febrero 2009, 01:16 am
por Alex_bro
Incrementar número de MPs
Sugerencias y dudas sobre el Foro
Filibustero de bolsillo 3 2,531 Último mensaje 14 Julio 2009, 20:22 pm
por ‭‭‭‭jackl007
Problema Incrementar puntero
Programación C/C++
x64core 5 2,185 Último mensaje 16 Junio 2012, 20:32 pm
por david_BS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines