Punteros

Todavía no logro entender bien que son los punteros (tengo alguna idea), he leído muchas definiciones pero casi todas son iguales.
Quisiera que me explicaras con tus palabras que son los punteros y si puedes hazme alguna comparación con algo.
Darío, saludos

1 Respuesta

Respuesta
1
... pasa mucho, no te preocupes.
A ver, brevemente:
Todos los datos que se guardan dentro de la memoria de un ordenador están en alguna posición de ésta. Ten en cuenta que cuando un programa almacena información, la va dejando por la memoria y, para poder recuperarla después, debe recordar la posición exacta donde la dejó. Esto no depende de los punteros, es algo que pasa siempre.
Pues bueno, un puntero es una variable que contiene una dirección de memoria, simplemente. Desde este punto de vista, ten en cuenta que cuando te refieres a un puntero puedes estar hablando de la dirección de memoria a la que apunta (un dato inútil en la mayoría de casos, pues no nos importa), o el contenido de dicha dirección, que suele ser lo que deseamos ver o tratar.
Pero no te líes, un puntero es una variable que contiene una dirección de memoria... punto. Mediante dicha variable podemos ver lo que hay almacenado en la memoria dentro de dicha posición.
Una variable normal también está en alguna dirección de la memoria, la diferencia con el puntero es que la variable normal está siempre en la misma dirección, cuidando de su contenido... mientras que el puntero tiene la libertad de moverse por la memoria de una dirección a otra.
Siempre debes tener claro si intentas acceder al contenido del puntero (dato contenido en la dirección de memoria a la que apunta) o a su dirección.
Te pongo un pequeño ejemplo comentado para que te hagas una idea:
...
int a,b; // dos variables normales de tipo entero.
int *p,*q; //dos punteros capaces de apuntar a direcciones de memoria donde se almacenen números enteros
a=7;
p=&a; // el puntero p apunta a la dirección de memoria donde se almacena la variable a. la dirección de una variable normal se obtiene con el & delante de su nombre.
*p=9; // guardamos, en el lugar al que apunta p, un 9. Esto quiere decir que ahora la variable a vale 9.
p=&b; // p apunta a la dirección de b.
q=p; // el puntero q apunta al mismo sitio que p
*q=10; // insertamos un 10 en la posición de memoria a la que apunta q, que es la misma que p, que a su vez apunta a la variable b. Es decir, sin liarnos, en la varible b se almacena un 10;
... //etc.
Un ejemplo como este es bastante inútil, pero va bien para hacerse una idea. Por último, y para que le veas un poco la utilidad, esto va bien parar tratar vectores, ya que todas sus posiciones van contiguas en la memoria. Cuando quieres, con un puntero, hacer que se mueva a la siguiente posición de memoria (o anterior) para ver los datos que se sitúan junto al actual, basta con incrementar o decrementar dicho puntero. De este modo:
int vec[10];
int *p;
...
p=&vec[0];
p++;
...
Al final de este código, el puntero p apunta a la segunda posición del vector, ya que lo hemos colocado al principio y luego hemos incrementado su posición en la memoria...
... en fin, practicando se acaba de ver claro, he intentado ser breve pero creo que no lo he conseguido... je, je...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas