• Viernes 15 de Noviembre de 2024, 11:51

Autor Tema:  operador de incremento y punteros  (Leído 1703 veces)

cabeto14

  • Nuevo Miembro
  • *
  • Mensajes: 17
  • Nacionalidad: co
    • Ver Perfil
operador de incremento y punteros
« en: Sábado 26 de Diciembre de 2009, 19:02 »
0
hola. soy nuevo en el foro mi nombre es carlos alberto hinojosa soy de colombia y tengo 16 años. estoy estudiando c++ y voy por punteros, en el curso que sigo me aparece esto:
Código: C++
  1.  
  2. *puntero++; /* Equivale a vector[0]++; */
  3. puntero++; /* puntero equivale a &vector[1] */
  4.  
  5.  
y me explican que en la primera linea incrementa el contenido de la memoria apuntada por "puntero", que es
vector[0], es decir que si en la posicion
  • habia un 2 ahora aumenta a 3, eso es lo que entendí. y en la segunda linea me explican que cambia la posicion a la que apunta el puntero es decir que si antes apuntaba a
  • ahora lo hace a [1].


pero al llevarlos a la practica, la segunda linea hace lo que me explican, pero la primera no:
Código: C++
  1.  
  2. int main ()
  3. {
  4. int a[4]={2,4,8,9},*p;
  5. p=a;
  6. cout<<*p<<"t";
  7. *p++;
  8. cout<<*p;
  9.  
  10. return 0;
  11. }
  12.  
  13.  
  14.  
 
el resultado que esperaria es que me mostrara en pantalla esto
 
2                      3
 
pero en cambio me muestra
 
2                      4
 
parece como si en vez de aumentar la variable lo que hace es exactamente lo que indica la linea dos (mas arriba).
para obtener el resultado deseado tengo que poner el incremento como prefijo asi:
Código: C++
  1.  
  2. int main ()
  3. {
  4. int a[4]={2,4,8,9},*p;
  5. p=a;
  6. cout<<*p<<"t";
  7. ++*p;
  8. cout<<*p;
  9.  
  10. return 0;
  11. }
  12.  
  13.  

entonces me gustaria saber porque pasa esto. si se supone que cuanto esta el operador de "desreferencia" o "indireccion" (*) se esta trabajando con el valor almacenado el la posición de memoria que almacena el puntero.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: operador de incremento y punteros
« Respuesta #1 en: Sábado 26 de Diciembre de 2009, 19:36 »
0
La segunda operacion (el incremento) se esta haciendo primero, si usas parentesis podes asegurarte que primero se desreferencie:
Código: C++
  1. (*p)++;
  2.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

cabeto14

  • Nuevo Miembro
  • *
  • Mensajes: 17
  • Nacionalidad: co
    • Ver Perfil
Re: operador de incremento y punteros
« Respuesta #2 en: Sábado 26 de Diciembre de 2009, 20:35 »
0
ok. lo que me dices es equivalente a hacer ++*p. pero, ¿sabes porque hay que encerrarlo en parentesis o ponerle el incremento como prefijo?

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: operador de incremento y punteros
« Respuesta #3 en: Sábado 26 de Diciembre de 2009, 21:36 »
0
Cita de: "cabeto14"
¿sabes porque hay que encerrarlo en parentesis o ponerle el incremento como prefijo?

Esto se debe a la precedencia de operadores en C/C++, ya que el operador ++ (incremento) tiene mayor precedencia que el operador * (indireccion), ademas de que el orden de evaluacion de ++ es de derecha a izquierda, en lugar de izquierda a derecha como el operador *, por lo tanto, incrementa la direccion de la variable primero, y luego accede al dato. Por eso para garantizar que se acceda primero al dato, y luego se incremente, se usa parentesis, todo lo que este entre parentesis tiene mayor precedencia que lo que no tiene parentesis, garantizando que los operadores se evaluen de la manera como tu quieras y no de la manera por defecto.

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

cabeto14

  • Nuevo Miembro
  • *
  • Mensajes: 17
  • Nacionalidad: co
    • Ver Perfil
Re: operador de incremento y punteros
« Respuesta #4 en: Domingo 27 de Diciembre de 2009, 02:10 »
0
ok. cero dudas muchas gracias.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: operador de incremento y punteros
« Respuesta #5 en: Domingo 27 de Diciembre de 2009, 02:36 »
0
Quiero complementar algo  ^_^
Cita de: "cabeto14"
...o ponerle el incremento como prefijo?
Cual es la diferencia entre post-incremento (i++) y pre-incremento (++i)?
Aqui tenes la respuesta completa.
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

cabeto14

  • Nuevo Miembro
  • *
  • Mensajes: 17
  • Nacionalidad: co
    • Ver Perfil
Re: operador de incremento y punteros
« Respuesta #6 en: Domingo 27 de Diciembre de 2009, 02:44 »
0
muchas gracias su- por complementar.