Alguna vez os habeÃs peleado con los punteros en C, seguramente que sÃ, la verdad es que es más que una comida de cabeza para todo o mas de uno, yo voy a intentar sentar una bases, a todo este jaleo de punteros que existen, para ello voy a utilizar el lenguaje C, que es el lenguaje propio de punteros.
Decir, que una vez que se sabeny se conocen perfectamente, es algo bastante bonito, y bastante curioso que merece la pena tocar, por lo tanto vamos a explicar en primer lugar que es la memoria, y por consiguiente como se accede a ella.
La memoria en primer lugar tiene direcciones de memoria, que generalmente se establecen, con numeros hexadecimales, es decir, una posición de memoria podrÃa ser la: 0×128, bien, si tenemos este codigo:
int var1;
Lo que hace el compilador generalmente es reserva 4 bytes, para la utilización de ese entero, reserva 4 bytes en memoria, si una palabra de memoria, ocupa 32 bits, pues un entero será una posicion o una palabra de memoria.
Cuando hago lo siguiente:
int * pnum;
El compilador me reserva un puntero, que en general también son 4 bits, que apuntará a un entero, por lo tanto, si yo ahora hago:
pnum=&var1;
Ese puntero lo apuntare a la direccion de memoria 0×128 que tenia la dirección de memoria de var1, y ya podré modificar la variable var1, a partir de ese puntero, de la forma:
*pnum=5;
Ahora var1 tiene un valor de 5.
Bien hasta aqui creo que todo más o menos esta entendido, lo que debemos de tener claro, es que la memoria es nuestra, y por tanto como la memoria es nuestra, podemos hacer lo que queramos con ella, con eso quiero decir, que podemos poner un puntero, apuntando a una direción de memoria y a partir de ahÃ, ir tocando poco a poco la memoria.
En C, por ejemplo, si creamos un puntero de tipo Int, sabemos que este puntero apuntará a un tipo de datos int, podemos ir recorriendo pero sabemos que hacemos una suma de un 1 a ese puntero es lo que mismo que recorrer 4 bytes a ese puntero, por que se trata de un puntero de tipo int. Veamos un ejemplo
int * p;
int aux [] = {1,2,3,4,5,6,7,8,9}; // Creamos el array que recorreremos.
p = aux; // apuntamos p a inicio del array aux.
p++; // CORRERA 4 bytes, en la memoria
print(”%d\n”,p); // Imprimira la segunda posicion del array.
Bien, como observación podemos ver que para posicionar el puntero p, podemos hacerlo asi, o también podemos hacerlo de la siguiente forma:
p = &(x[0]);
Es decir, p apunta a la dirección de memoria en la que empieza el array de datos.
De esta forma, he enseñado un poco lo que son punteros, y aritmetica de punteros con ellos, seguiré hablando en otra entrada, pero lo que esta claro es que con lo punteros puedes apuntar a cualquier sitio de la memoria, modificarla y hacer lo que quieras, es lo bueno que tienen los punteros.
Si disfrutaste nuestro artÃculo, siéntete libre de suscribirte a nuestro feed rss