Me pueden decir la diferencia?

Shark
16 de Marzo del 2004
Soy un estudiante que apenas va comenzando pero al hacer un programa no entiendo, los punteros; he leído sobre el tema pero no me queda claro dentro del programa por que no se que esta haciendo, pero bueno me pueden decir cual es la diferencia entre el asterisco( * ) y el ampersan( & ), por que no me queda claro como lo uso dentro de un programa; gracias.



chuidiang
16 de Marzo del 2004
Imagina los punteros como flechas que apuntan a una variable.

Puedes declarar una variable o un puntero (una flecha) así.

int a; // Variable
int *b; // Puntero. Es una flecha que apuntará a un entero

Cuando tienes la variable y quieres obtener un puntero, le pones & delante

b = &a; // a es variable, &a es una flecha que apunta a la variable a. b era una flecha, aqui estamos haciendo que b apunte al mismo sitio que &a, es decir, b apuntará a la variable a

Si quieres saber cual es el valor de la variable a la que apunta un puntero, pones delante del puntero un *

printf ("%dn", *b); // Esto escribe en pantalla el valor del entero al que apunta b, es decir, el valor de a.

Espero que esto te aclare un poco.

Se bueno.

XXX
16 de Marzo del 2004
hola shark:

El operador & da la dirección de un objeto, este solo se aplica a objetos que están en memoria, o sea a las variables y a los elementos de los arreglos.

por ejemplo: tengo una variable "a" de tipo int y declaro a una variable "ptr" como apuntador a int.

entonces yo puedo hacer lo siguiente:
ptr = &a;
/* con esto hago que ptr apunte a la variable a */

el operador * se utiliza para desreferenciar, o sea puedo tener acceso al objeto.

por ejemplo yo puedo hacer lo siguiente:

int x = 10, y = 0;
int *ptr; /* un apuntador a int */

ptr = &x; /* ptr apunta a la variable x */
y = *ptr; /* y tiene acceso al contenido de ptr, o sea y = 10 */
*ptr = 0; /* x es ahora 0 */


Shark
16 de Marzo del 2004
Gracias por la respuesta pues ahora entiendo un poco más sobre el tema; pero me queda una duda más.
Si el operador ampersan( & ) sirve para las variables almacenadas en memoria y arreglos, el asterisco( * ) es usado para accesar al valor de la variable a la que apunta con capacidad de modificarlo; por que simplemente no pongo:

int a=0,b=10;
a=b;

en lugar de

int *a,b=10;
*a=b;

cuál es el beneficio de usar punteros?, el ejercicio que hice anteriormente esta bien?, y cómo puedo identificar el momento adecuado en el que puedo usarlo en un programa?

Gracias de antemano.