Pregunta:
¿Que significado tienen los punteros en C++?
2011-01-27 10:09:09 UTC
el caso es que dicenq ue un puntero sirve apra que una variable recoja el valor de otra variable, pero fijaros.

con puntero:

#include

using namespace std;

int main() {
int x;
int *y;
x = 55;
y = &x;
cout << x << endl;
system ("pause");
return 0;
}

sin puntero:

#include

using namespace std;

int main() {
int x;
int y;
x = 55;
y = x;
cout << x << endl;
system ("pause");
return 0;
}


si os fijais tanto utilizando el valor puntero como no el valor de la variable x se pasa a al variable y tanto si usas un puntero como si no, ¿entonces para que sirven realmente los punteros?
Tres respuestas:
Sir Nico
2011-01-27 21:59:45 UTC
hay una gran diferencia que no esta en los codigos que nos mostras, que es la siguiente:

en tu codigo con puntero si despues que le asignes la direccion de "x" a "y" (y = &x;) decides cambiarle el valor a "x" lo puedes hacer usando "y" por ejemplo asi *y=5; de esta manera "x" e "y" pasan a tener valor 5 osea que "y" es un alias de "x", en otras palabras si se modifica el valor del puntero "y" tambien se modifica el valor de "x"; al contrario si no usaras punteros y pones a "y" el valor de 5 de esta manera y=5; la variable "x" no se veria afectada y seguiria teniendo el 55.
2011-01-27 11:35:10 UTC
en tu ejemplo... para nada :)



Pero en la vida real... para todo.



Los arrrays en C y C++ son modelados como punteros, por ejemplo:

int x[10]; //es un array de 10 enteros

la "x" es un puntero al primer elemento de los 10 elementos, así que hacer

x[0] ó *x (el valor almacenado en la posición de memoria apuntada por x) retornan lo mismo.



Cuando tú quieres que la computadora te dé más memoria de la que has reservado para tus datos, lo que te devuelve es un puntero a esa memoria.



Por ejemplo, para almacenar una lista de strings, podrías hacer:



string lista[100]; //pero esto te limitaría a 100 elementos



Si quisieras que el sistema operativo te dé más memoria, tienes que hacer algo como:





string* lista = new string[n];



//donde n será el número de elementos que necesitas en ese momento. El operador "new" te devuelve un puntero.



Y así...



Sin punteros, tu programa sólo podría manejar las variables que has definido y listo, con los punteros puedes pedir al sistema operativo q te dé lo que vayas necesitando a medida de que vayas necesitando.
Vladimir
2011-01-27 11:34:18 UTC
Te explicaré sobre los punteros tomando tu ejemplo para que entiendas...



Sin puntero:



x=55; //Se asigna 55 a la variable "x"

y=x; //Se asigna EL VALOR de "x" a la variable "y", por lo que "y" vale 55

x=10;

cout << y << endl; //En pantalla imprime 55, el valor de "y" es independiente a la variable "x"



Con puntero:



x=55 //Se asigna 55 a la variable "x"

y=&x //Se asigna UN PUNTERO de "x" a la variable "y", por lo que "y" vale "x"

x=10;

cout << y << endl; //En pantalla imprime 10, el valor de "y" es un PUNTERO a la variable "x" por lo que toma el valor de "x"



El uso de punteros se usa más en el paso de parámetros a las funciones, por ejemplo la función para intercambiar los números:



void cambio(int *x, int *y){

...int temp;

...temp = *x;

...*x = *y;

...*y = temp;

}



int main(){

...int x;

...int y;

...x = 55;

...y = 10;

...cout << x << " - " << y<< endl;

...cambio(&x,&y); //Se envía sólo los punteros de las variables "x" y "y"

...cout << x << " - " << y<< endl;

...system ("pause");

...return 0;

}





Cualquier duda que tengas, estoy a un mensaje de distancia... Saludos


Este contenido se publicó originalmente en Y! Answers, un sitio web de preguntas y respuestas que se cerró en 2021.
Loading...