You are on page 1of 6

Que es un puntero?

Un puntero o apuntador es una variable que referencia una regin de memoria; en otras palabras es una variable cuyo valor es una direccin de memoria. Si se tiene una variable ' p ' de tipo puntero que contiene una direccin de memoria en la que se encuentra almacenado un valor ' v ' se dice que ' p ' a punta a ' v '. El programador utilizar punteros para guardar datos en memoria en muchas ocasiones, de la forma que se describe a continuacin. Los usos principales, que tienen, los punteros, son los siguientes: ->Nos ayuda, para que una funcin devuelva ms de un valor. Por ejemplo, una funcin que devuelva un vector de enteros, en dicha funcin mandamos la direccin del primer elemento a la funcin principal, y a partir de ella, imprimimos todos los valores contenidos en el vector. ->Mejor uso de la memoria dinmica. Esto es lo que ms nos tiene cuenta, el lector debe tener presente que, el uso de punteros, ayuda a ahorrar memoria y por consiguiente, hace ms efectivo el uso y administracin de la misma. Tipos de punteros Los punteros, al igual que una variable comn, pertenecen a un tipo (type), se dice que un puntero 'apunta a' ese tipo al que pertenece. Ejemplos: int* pint; //Declara un puntero a entero char* pchar; //Puntero a char fecha* pfecha; //Puntero a objeto de clase 'fecha'.

Adems existen algunos tipos definidos por el programador, es decir, Tipos como 'bool', 'int' o 'char', son "tipos predefinidos", pertenecientes al lenguaje, sin embargo, es posible definir tipos nuevos. Las enumeraciones, uniones, estructuras y clases, son tipos nuevos que implementa el programador. La declaracin de un tipo no produce ningn efecto en memoria, no hay ningn identificador donde almacenar un dato, por esa razn no tendra sentido, dentro de la definicin de una estructura o clase, intentar dar un valor a sus datos, seria lo mismo que intentar dar un valor a un tipo predefinido, por ejemplo: long = 8;

Para asignar un valor necesitamos un objeto, pues un objeto implica una regin de memoria donde almacenar un valor. El almacenamiento en memoria de una unin, enumeracin o estructura (C), no presenta importantes cambios respecto a los tipos predefinidos, sus elementos se ordenaran de modo consecutivo de acuerdo a su 'sizeof'. Respecto a C.

Ahora

veremos

ejemplos

de

como

manejar

punteros

en

lenguaje

C.

La forma de declarar un puntero es: tipo* puntero;

Hay que ver el signo asterisco (*) llamado indireccin antes del nombre del puntero, este designa que es propiamente un puntero y no una variable convencional. Aqu solamente le decimos al compilador que reserve una posicin en la memoria para nuestro puntero. Antes de usar el puntero tenemos que iniciarlo, para eso le pediremos que guarde la direccin (representada con el signo amperson &) de alguna variable.

Para cambiar el contenido de la direccin a la que apunta el puntero, utilizamos el operador de indireccin. Esto hace que cambie el valor al que hace referencia y no la direccin del mismo puntero.

Un ejemplo completo

La relacin estrecha existente entre arreglos y punteros se debe a que el nombre de un arreglo es equivalente a la direccin del primer elemento (&arreglo[0]), no es necesario utilizar el operador de direccin para apuntar al primer elemento de un arreglo.

Si a un puntero se le suma una cantidad, cambia la direccin esa misma cantidad mas no el valor al que apunta. Es equivalente a hacer:

Debido a la precedencia de operadores, la expresin:

Significa asignar el contenido de lo apuntado, a la variable, y despus incrementar la direccin un lugar, y la expresin

Significa incrementar la direccin del puntero y despus asignarle el contenido de lo apuntado, a la variable. Si declaramos una variable en C, el espacio se reserva durante todo el tiempo de ejecucin aun cuando solo lo necesitemos para una pequea fraccin del programa, para evitar esto podemos almacenar el arreglo en la zona de amontonamiento Heap.

Esta declaracin no crea un espacio para almacenar la variable, solamente una direccin para despus almacenarla, ahora tenemos que designar la cantidad de espacio que deseamos, para ello utilizamos una funcin de la librera stdlib dedicada a la tarea, entre ellas esta la ms comn: malloc.

malloc recibe la cantidad de bytes que se desea reservar y nos devuelve un puntero o direccin a la primera posicin de la "pila" reservada en el Heap, si no se puede crear el espacio, devuelve un puntero a NULL. Utilizando la funcin sizeof podemos designar el tamao de cada variable.

Si queremos guardar en el Heap alguna operacin solamente haramos algo como

Y como ya habamos visto para recuperar la variable almacenada

Como una cadena no es ms que un arreglo que almacena caracteres, podemos guardar cadenas en punteros

As *puntero contendra el primer elemento de la cadena (H) y si necesitamos el segundo solamaente escribimos *(puntero + 1). De la misma manera que podemos declarar arreglos, podemos declarar arreglos de punteros

Con *arreglo podemos acceder a la primera frase, con *(arreglo + 1) a la segunda frase, etc.

Para crear estructuras y asignar valores a los miembros hacemos:

Nota que antes de inicializar un elemento de la estructura es necesario alojarla en la memoria con la ayuda de malloc. Cuando pasamos una estructura a una funcin, se copian todos los elementos de la estructura, para resolverlo pasamos un puntero que apunta a la estructura en lugar de toda la estructura.

Una funcin que regresa un puntero se escribe

You might also like