M4T7 Estructuras de Datos Dinámicas Punteros
M4T7 Estructuras de Datos Dinámicas Punteros
M4T7 Estructuras de Datos Dinámicas Punteros
punteros
Fundamentos de programación
CONTENIDO
1. Objetivos
2. Introducción
5. Arrays de punteros
6. Punteros y arrays
7. Punteros a cadenas
8. Punteros a estructuras
9. Indirección múltiple
12. Conclusiones
13. Bibliografía
Estructuras de datos dinámicas: punteros 3
Introducción
Un puntero es una variable que almacena un valor
Figura 2. Ejemplo de definición de punteros.
de memoria y el uso de este. Se utilizan para que las
operaciones, que se deben realizar en la memoria
RAM del ordenador, sean más eficientes, tanto en la En el caso de los punteros void, estos son unos punteros
administración de recursos como de la cantidad de especiales, ya que no están asociados a algún tipo de
código que se necesitaría para realizar las operaciones dato en particular, si no que, una vez declarados, se le
sin el uso de estos. puede asignar cualquier tipo de valor, lo que permite que
el tamaño del puntero pueda variar y estar asociado al
tipo de dato que apunta. Su sintaxis es la siguiente:
Concepto. Definición void *<nombre>;
de puntero
En los sistemas informáticos, es normal que existan
situaciones en donde no se pueda determinar el
Operadores y operaciones
tamaño máximo que puede necesitar una variable de con punteros
memoria y asignarle toda la memoria del ordenador
Los punteros son objetos muy similares a los números
a una sola variable es improcedente y quizás resulte
enteros y existen diferentes operaciones definidas que
hasta insuficiente. Para estos casos, es necesario hacer
se pueden realizar con estos, como, por ejemplo, se
uso de las variables dinámicas que permiten ampliar
pueden comparar los punteros con el uso de expresiones
el tamaño o comprimirse según las necesidades. Las
lógicas con la finalidad de ver si dos punteros hacen
variables dinámicas son representadas con un tipo de
referencia a la misma dirección de memoria, también se
dato conocido como el puntero.
puede sumar o restar un entero para producir una nueva
Un puntero es un objeto utilizado en los lenguajes de localización de memoria.
programación para definir una variable que permita
Algunos de los operadores que sirven para manipular los
el almacenamiento de la dirección de memoria de un
punteros en C++ son los siguientes [3] (tabla 1):
objeto. El valor de dicha dirección se puede obtener con
el proceso de desreferenciación del puntero (figura 1). Si
se desea hacer una analogía, el número de página puede
considerarse como el puntero e ir al contenido de dicha
página sería el proceso de desreferenciación [1].
Estructuras de datos dinámicas: punteros 4
Hay que recordar que un puntero de puntero es una forma Un ejemplo básico de esta situación es el siguiente
de indirección múltiple, se puede conseguir el valor de una (figura 9):
variable viendo a la dirección que apunta otra variable.
Hay que recordar que, si un puntero F apunta hacia un tipo En el siguiente ejemplo se hace referencia a este caso
de datos D, la sintaxis: *F es del tipo D. Si, por ejemplo, práctico donde se visualizará el lugar de almacenamiento
D es un puntero, entonces *F apuntará al puntero D. de la variable del dato y los diferentes apuntadores y, a
su vez, la dirección que hace referencia los diferentes
apuntadores (figura 10).
Paso de funciones,
estructuras y arrays como
parámetros de funciones
Las funciones del lenguaje C++ no permiten cambiar, de
forma directa, el contenido de las variables que se envían
por valor. Para lograr el cambio, la función se debe enviar
el puntero hacia la dirección de memoria que contiene el Figura 13. Ejemplo de envío de parámetros por referencia.
dato almacenado de la variable, con el fin de que pueda
ser modificado por las instrucciones de las funciones a
medida que se ejecutan. Paso de un arreglo unidimensional como parámetro de
una función: los arreglos son enviados por referencia
Las funciones permiten el envío de múltiples tipos de como parámetro de la función, nunca son enviados por
datos, inclusive, aquellos de tipo estructura, arreglos de valor. Para el envío del arreglo en la función se puede
memoria e, inclusive, otras funciones. Esto le permite utilizar dos sintaxis:
procesar todo tipo de información y ejecutar, antes de
invocar la función, el procesamiento de algoritmos • Utilizando corchetes []
complejos para entregar un valor como parámetro a la • Utilizando el estilo puntero con el uso del asterisco
función que se desea invocar. *
Paso de parámetros por referencia a una función: Un ejemplo del uso del arreglo unidimensional, como
aquí se envía la dirección de memoria en donde están parámetro de la función con el uso de ambas sintaxis, es
almacenados los datos de la variable que se desea el siguiente (figura 14):
modificar. Para ello, se debe utilizar en la definición de la
función la siguiente sintaxis:
Figura 14. Ejemplo de envío de arreglo unidimensional como parámetros por referencia.
Paso de estructuras a una función: los punteros pueden Un ejemplo del uso de estructura en una función que
declararse para que apunten a una estructura. Estos permita enviar los valores de los datos de la estructura
apuntadores pueden enviarse como parámetros a las por referencia y por valor es el siguiente (figura 15):
funciones y manipular los datos dentro de la función con
los comandos flecha “->”.
Estructuras de datos dinámicas: punteros 12