Apuntadores con c++ Ayuda!!!

Iniciado por bamdrums, 15 Enero 2015, 02:12 AM

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

bamdrums

hola que tal quisiera que alguien me pudiera explicar un programa ya que en verdad que no entiendo el funcionamiento del programa , encontré la solución un amigo me ayudo pero aunque me explico aun tengo dudas espero me puedan ayudar .
El programa tenía que tener 2 valores en dos variables y con apuntadores se tenía que invertir el valor de estos les dejo el código :

#include <iostream>


using namespace std;

int main (){
   
   int x=3,y=2,*p1=NULL,*p2=NULL;
   
   cout << "El valor de x es: "<< x << "\n";
   cout << "El valor de y es: "<< y << "\n\n\n";
   
   
   p1=&y;
       p2=&x;
   *p1 += *p2;
       *p2 = *p1-*p2;
       *p1 -= *p2;
   

   cout << "El valor de x es: "<< x << "\n";
   cout << "El valor de y es "<< y << "\n\n\n";
   
   return 0;
   
   
}


Al ejecutar el programa si invierte los valores , lo que no entiendo es el algoritmo que hace esto , siendo está la parte del código:


       *p1 += *p2;
       *p2 = *p1-*p2;
       *p1 -= *p2;

espero que me puedan explicar :C , saludos

MCKSys Argentina

Código (c++) [Seleccionar]
int x=3,y=2;
p1=&y;
p2=&x;
*p1 += *p2;
*p2 = *p1-*p2;
*p1 -= *p2;


El "apuntador" o puntero (o, mejor aún, pointer) p1 contiene la dirección de memoria donde se encuentra en valor de y. Asimismo, p2 contiene la dirección de memoria donde se encuentra en valor de x.

Ahora:

Código (c++) [Seleccionar]
*p1 += *p2;

Al valor al que apunta el puntero p1 (osea, y ó el valor 2), se le suma el valor al que apunta el puntero p2 (osea, x ó el valor 3).
En otras palabras:

Código (c++) [Seleccionar]
y += x; //y ahora vale 5

Luego:

Código (c++) [Seleccionar]
*p2 = *p1-*p2;

Al valor al que apunta el puntero p2 (osea, x ó el valor 3), se le asigna el valor al que apunta el puntero p1 (osea, 5) menos el valor al que apunta el puntero p2 (osea, 3).
En otras palabras:

Código (=c++) [Seleccionar]
x = y - x; //x ahora vale 2

Por último:

Código (=c++) [Seleccionar]
*p1 -= *p2;

Al valor al que apunta el puntero p1 (osea, 5), se le resta el valor al que apunta el puntero p2 (osea, 2).
En otras palabras:

Código (=c++) [Seleccionar]
y = y - x; //y ahora vale 3

De esta forma, los valores se invierten usando punteros...  :P

Saludos!

PD: Cuando coloques código, asegúrate de usar etiquetas Geshi.
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


bamdrums

muchas gracias me ha quedado muy claro :), disculpa soy nuevo en el foro no se como ingresar etiquetas geshi . ¿En dónde puedo encontrar la forma de hacerlo?

engel lex

aqui


... seleccionar tu codigo, haces click ahí y escoges tu lenguaje... (o las pones y pegas tu codigo adentro, como más gustes)

usa el botón modificar y aplícalas en tu post inicial ;)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

bamdrums

Muchas gracias lo he logrado en otro tema :) , perdona mi torpeza pero soy malo con esto de los foros jeje en dónde está el botón modificar :S  ?

engel lex

justo arriba a la derecha de cada post

es el boton
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.