Un Apuntador es una variable que contiene una direccin de
memoria, la cual corresponder a un dato o a una variable que contiene el dato. Los apuntadores tambin deben de seguir las mismas reglas que se aplican a las dems variables, deben tener nombre nicos y deben de declararse antes de usarse. Cada variable que se utiliza en una aplicacin ocupa una o varias posiciones de memoria. Estas posiciones de memoria se accesan por medio de una direccin.
En la figura el texto Hello sta guardado en memoria, comenzando en la direccin 1000. Cada carcter ocupa un espacio de direccin nico en memoria. Los apuntadores proporcionan un mtodo para conservar y llegar a estas direcciones en memoria. Los apuntadores facilitan el manejo de datos, debido a que conservan la direccin de otra variable o ubicacin de datos. Por qu son Importantes los Apuntadores? Los apuntadores dan flexibilidad a los programas en C++ y permiten que estos crezcan dinmicamente. Utilizando un apuntador hacia un bloque de memoria que se asigna al momento de ejecucin, un programa puede ser ms flexible que uno que asigna toda su memoria de una sola vez. Tambin, un apuntador es ms fcil de guardar que una estructura grande o un objeto de una clase. Debido a que un apuntador slo guarda una direccin, puede fcilmente pasarse a una funcin. Una de las desventajas que pueden presentar los apuntadores es que un apuntador sin control o no inicializado puede provocar fallas en el sistema, adems de que su uso incorrecto puede generar fallas muy complejas de hallar. Operadores de indireccion y direccin Hay 2 operadores que se usan cuando trabajan con direcciones en un programa C; el Operador de Indireccin (*) y el de Direccin (&). El Operador de Direccin ( &) regresa la direccin de una variable. Este operador est asociado con la variable a su derecha: &h; Esta lnea regresa la direccin de la variable h. El Operador de Indireccin ( * ) trabaja a la inversa del operador de Direccin. Tambin esta asociado con la variable a su derecha, toma la direccin y regresa el dato que contiene esa direccin. Por ejemplo, la siguiente lnea determina la direccin de la variable h y luego usa el operador de Indireccin para accesar la variable y darle un valor de 42: *(&h)=42;
La declaracin de un puntero de manera general es: tipo *nombre de apuntador; Tipo : Especifica el tipo de objeto apuntado y puede ser cualquier tipo. Nombre de apuntador: Es el identificador del apuntador. El espacio de memoria requerido para un apuntador, es el nmero de bytes necesarios para especificar una direccin de memoria, debiendo apuntar siempre al tipo de dato correcto. La Aritmtica de Apuntadores. Solamente se pueden realizar operaciones de incremento y decremento, y estos es deacuerdo a la longitud de su tipo de base. Por ejemplo supngase que una mquina particular utiliza direccionamiento de byte, un entero requiere 4 bytes y el valor de la variable pi (declarada asi: int *pi) es 100, es decir, se apunta al entero *pi en la localidad 100. Entonces el valor de pi-1 es 96, el de pi+1 es 104 y el de pi+2 es 108. El valor de *(pi-1) es el de los contenidos de los 4 bytes 96,97,98, y 99 , el de *(pi+1) es el del contenido de los byte 104, 105,106 y 107, y el de *(pi+2) es el entero que esta en los bytes 108,109,110 y 111. De manera parecida, si el valor de la variable pc (declarada asi: char *pc; ) es igual a 100, y un carcter tiene un byte de longitud, pc-1 refiere a la localidad 99, pc+1 a la 101 y pc+2 a la 102.
Apuntadores a Funciones. Un rea en la cual desempean un papel prominente los apuntadores es el lenguaje C es la transmisin de parmetros a funciones. Por lo comn, los parmetros se transmiten por valor a una funcin en C, es decir, se copian los valores transmitidos en los parmetros de la funcin llamada en el momento en que se invoca. Si cambia el valor de un parmetro dentro de la funcin, no cambia su valor en el programa que la llama. Por ejemplo considrese el siguiente fragmento y funcin de programa (el numero de lnea es solo una gua en el ejemplo): La lnea 2 imprime el nmero 5 y despus llama a funct. El valor de "x", que es 5, se copia en "y" y comienza la ejecucin de funct. Despus, la lnea 9 imprime el nmero 6 y regresa funct. Sin embargo, cuando la lnea 8 incrementa el valor de "y", el valor de "x" permanece invariable. As, la lnea 4 imprime el nmero 5, "x" y "y" refieren a 2 variables diferentes. Si deseamos usar funct para modificar el valor de "x", debemos de transmitir la direccin de "x" de la siguiente manera:
La lnea 2 imprime nuevamente el nmero 5, y la lnea 3 llama a funct. Ahora, sin embargo, el valor transferido no es el valor entero de "x" sino el valor apuntador "&x". Este es la direccin de "x". El parmetro de funct no es ms y de tipo int, sino py de tipo int * . (Es conveniente nombrar a las variables apuntadores comenzando con la letra p para recordar tanto que se trata de un apuntador) la lnea 8 ahora aumenta al entero en la localidad py; py, sin embargo, no cambia y conserva su valor inicial "&x". As, py apunta al entero "x" de tal manera que cuando *py, aumenta x. La lnea 9 imprime 6 y cuando regresa funct, la lnea 4 imprime tambin 6. Los apuntadores son el mecanismo usado en el lenguaje C para permitir a una funcin llamada modificar las variables de la funcin que llama.