You are on page 1of 22

APUNTADORES

APUNTADORES

Los apuntadores son variables que guardan


direcciones en C y C++

Proporcionan mucha utilidad al programador


para accesar y manipular los datos.

Son tiles para pasar y regresar valores a la


rutina que las llama.

Si son usadas incorrectamente se pueden


convertir en fuente de fallas y fustraciones.

MANEJO DE LA MEMORIA

ACCEDIENDO A LA DIRECCION
DE UNA VARIABLE

El operador ''! permite conocer la direcci"n


en memoria de una variable.
vble#

Los punteros pueden traba$ar con esas


direcciones

DECLARACION DE UN
PUNTERO
%oda variable tiene direcci"n! incluso sin
conocerla es posible guardarla en un puntero

int & p'ble ( )# ** puntero iniciali+ado con valor )



PUNTEROS

Los punteros siempre deben iniciali+arse.

,quellos punteros que son iniciali+ados con


un valor igual a cero -).! se denominan
punteros /0LL.

,quellos punteros que no sean iniciali+ados a


ningn valor se denominan 12ild pointer3! y
son extremadamente peligrss pues
pueden estar apuntando a cualquier cosa.

PUNTEROS
unsigned short int edad ( 4)# ** creacion de variable
unsigned short int & pEdad ( )# ** creaci"n de puntero
.
.
.
pEdad ( edad# ** asignando la direcci"n de edad en
** pEdad
cout 55 pEdad# ** imprimiendo la direcci"n guardada
** en pEdad
cout 55 &pEdad# ** imprimiento el valor al que apunta
** el puntero

EL OPERADOR ! EN LOS
PUNTEROS

Para declarar un puntero es necesario usar el


operador &! $usto despu6s del tipo de ob$eto al que
apunta el puntero

short int & pPuntero ( )#

Cuando se desea e7traer el valor al que apunta un


puntero -en ingl6s se denomina 1dereference3. es
necesario usar el operador &! $usto antes del nombre
del puntero.

pPuntero ( 4 ** asignando 4 al espacio de


** memoria donde apunta
** pPuntero

"PARA #UE SE USAN LOS
PUNTEROS$

8anipular datos en el 9ree store -:eap.

,cceder a las variables miembro y m6todos


de las clases

Pasar variables por referencia a las funciones



%&REE STORE' ( %)EAP'

El 9ree Store es un espacio de memoria m*+


grande, donde es posible almacenar
informaci"n# solo puede ser manipulado por
medio de punteros.

, diferencia que en el Stac;! la memoria


reservada en el 9ree Store no se libera sino
hasta que se termina el programa o es
liberada manualmente.

TIP- 0sualmente se usan los destructores


para liberar la memoria

%&REE STORE' ( %)EAP'

Para reservar memoria en el :eap es necesariio


usar el comando ne., el cual devuelve la direcci"n
donde se reserv" la variable.
typedef unsigned short int 0S:<=%#
0S:<=% & pPuntero#
pPuntero ( ne2 0S:<=%#
*&tambi6n es posible hacerlo todo en una sola
l>nea.
0S:<=% & pPuntero ( ne2 0S:<=%# &*

UN POCO MAS DE NE/

Cuando ne2 no pueda crear memoria en el


free store -?la memoria no es ilimitada@.! ne2
lan+a una ex0ep0i1n indicando este fallo!
entraremos en datalle mAs adelante...

LIBERANDO LA MEMORIA DEL
)EAP

Para liberar la memoria del :E,P se usa el


comando delete sobre el puntero.
delete pPuntero#

Es MU2 importante liberar la memoria del


:eap! pues en caso de perder el rastro de los
punteros podrAn presentarse 13*gas de
memria3

&U4AS DE MEMORIA

Cuando 1se pierde de vista3 la direcci"n o el


puntero que lleva registro del espacio en el
:eap! se dice que hubo una fuga de memoria

La memoria desperdiciada por causa de fugas


de memoria! /< podrA liberarse sino hasta
que termine el programa.

&U4AS DE MEMORIA

Es muy frecuente que ocurra cuando el


puntero es declarado como variable local
-dentro de una funci"n. y luego se sale de
6sta sin antes liberar la memoria.

Es muy comn usar los constructores para


reservar memoria en el heap y los
destructores para liberarla

&U4AS DE MEMORIA

?<B<@! reali+ar un delete sobre un puntero


libera la memoria! reali+arlo de nuevo
estrellarA el programa. Para que esto no
ocurra! as>gnele al puntero el valor de cero
DESPU5S de hacer el primer delete.

USO DE OBJETOS EN EL &REE
STORE

La asignaci"n de un ob$eto en el :eap es


igual que la asignaci"n de cualquier otro tipo
Cato & pPelusa ( ne2 Cato#
*&Este comando crearA un ob$eto tipo Cato en
el :eap! llamando su contructor&*

ACCEDIENDO A LOS
MIEMBROS DE UNA CLASE
**Las siguientes lineas hacen lo mismo
-& pCat..numeroPatas-.#
pCatDEnumeroPatas-.#

APUNTADORES COMO DATOS
MIEMBRO

%odas las variables pueden ser declaradas


para que habiten en el :eap! incluso las
variables miembro de los ob$etos.

EL PUNTERO %t6is'

%odas las clases tienen un puntero escondido


denominado 1this3! el cual apunta sobre la
direcci"n del ob$eto en cuesti"n.

/o hay necesidad de preocuparse de la


creaci"n ni el borrado de este puntero! pues el
compilador se encarga de esto.

USO DE PUNTEROS
CONSTANTES

const int & p0no# ** El valor al que apunta p0no no


** puede ser modificad

int & const pFos# ** El valor de direcci"n no puede ser


** modificada

Const int & const p%res# ** ni el valor de la direcci"n! ni el


** valor al que apunta p%res
** puede ser modificado



USO DE PUNTEROS
CONSTANTES

Cuando un puntero es declarado para que


apunte a un ob$eto constante! solo podrA
acceder a los m6todos constantes de dicho
ob$eto.

El puntero this de un ob$eto constante solo


podrA ser usado con m6todos constantes.

You might also like