You are on page 1of 29

Programacin 1

Unidad 07 Punteros y memoria dinmica


Profesores
William Bravo Edson Mendiolaza Juan Ramrez

Unidad 07 Punteros y memoria dinmica


Objetivos

Memoria del computador Asignacin en C Punteros Comando de Indireccin Ejercicios

Memoria de la computadora

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Memoria del computador


La memoria del computador es el lugar donde se almacenan los valores de las variables que declaramos en nuestros programas. La memoria est formada por un conjunto de celdas continuas cada una de 1 byte de tamao. Estas celdas estn enumeradas de forma consecutiva de tal forma que cada celda tiene el mismo nmero que la anterior ms 1.
AB001 AB002 AB003 AB004 AB005 AB006 AB007 N-1 N

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Memoria del computador


Al declarar una variable el Sistema Operativo (S.O) reserva en la memoria el espacio necesario para almacenar dicha variable.
Las variables tienen diferente tamao que pueden ser obtenidos utilizando la funcin sizeof(tipo)

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Memoria del computador


La ubicacin de las variables dentro de la memoria es aleatoria y se calcula cada vez que se ejecuta el programa por lo que no podemos saber la posicin exacta hasta que el programa se ejecute.

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Memoria del computador


tipodato Variable;
AB001 AB002 AB003 AB004 AB005

Variable Variable

La segunda vez que se ejecuta el programa

AB006
AB007

La primera vez que se ejecuta el programa

N-1 N

Analoga de la memoria

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Analoga de la memoria
Un teatro La memoria

Una persona desea ingresar a un teatro. El acomodador (personal encargado de la ubicacin) busca un espacio disponible y ubica a la persona en dicho espacio.

Una variable desea ingresar a la memoria del computador. El sistema operativo busca un espacio disponible y ubica a la variable en dicho espacio. En la prxima ejecucin, el Sistema Operativo probablemente ubicar a la variable en un lugar distinto dependiendo de la disponibilidad en la memoria.

En la prxima funcin de teatro, el acomodador probablemente ubicar a la persona en un lugar distinto dependiendo de la disponibilidad en el teatro.

Asignacin en C

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Asignacin en C
Cuando hacemos una aplicacin, diversas variables, por ejemplo:
char x; int y; float z;

declaramos

Pero recuerda que.


Cada variable, segn el tipo de dato, ocupa una cantidad distinta de bytes en memoria

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Memoria del computador


Direccin
AB001 AB002 AB003 AB004 AB005 AB006 AB007 AB008 AB009 AB00A AB00B AB00C AB00D AB00E AB00F AB010 AB011 AB012 AB013 AB014 . . N

Valor

Al declarar una variable, el S.O le asigna la mejor ubicacin posible en memoria

char x x; int y y; float z z;

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Asignacin en C
Direccin Valor

AB001 AB002 AB003 AB004 AB005 AB006 AB007 AB008 AB009 AB00A AB00B AB00C AB00D AB00E AB00F AB010 AB011 AB012 AB013 AB014 . . N

Luego de declarar las variables, recin podemos asignarle un valor

x = A A; y = 17 17; z = 15.8 15.8;

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Asignacin en C
Direccin Valor

AB001 AB002 AB003 AB004 AB005 AB006 AB007 AB008 AB009 AB00A AB00B AB00C AB00D AB00E AB00F AB010 AB011 AB012 AB013 AB014 . . N

15.8

En C++, Referenciamos a las variables por su nombre para imprimirlas printf (%c, x); printf (%d, y); printf (%f , z); Referenciamos a las variables por su direccin cuando vamos a almacenar un valor en ellas

17

scanf(%c, &x); scanf(%d, &y); scanf (%f, &z);

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Asignacin en C
Existen otro tipos de variables a los ya tradicionales
Estas variables no almacenan un dato char o int o double o float, almacenan direcciones de memoria

Las variables que almacenan direcciones de memoria, reciben el nombre de puntero o variable dinmica.

Punteros

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Punteros
Un puntero es un tipo especial de variable, que almacena el valor de una direccin de memoria y es en la direccin de memoria, donde se encuentra en dato.
Para almacenar una direccin de memoria, las variables del tipo puntero, requieren de 2 bytes.

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Punteros
Un puntero se define de la siguiente forma
Tipo de dato * nombredelpuntero; Ejemplo:
int * ptrentero; char * cadena; float * numero;

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Punteros
Imaginemos que hemos declarado dos variables:
int y; int * ptrentero;

Recuerda que.
Mientras la primera variable y almacena un dato entero la segunda ptrentero almacena una direccin de memoria.

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Punteros
Direccin
AB001 AB002 AB003 AB004 AB005 AB006 AB007 AB008 AB009 AB00A AB00B AB00C AB00D AB00E AB00F AB010 AB011 AB012 AB013 AB014 . . N

Valor

Al declarar una variable, el S.O le asigna la mejor ubicacin posible en memoria int y; int *ptrentero;

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Punteros
Direccin
AB001 AB002 AB003 AB004 AB005 AB006 AB007 AB008 AB009 AB00A AB00B AB00C AB00D AB00E AB00F AB010 AB011 AB012 AB013 AB014 . . N

Valor

Luego de declarar las variables, recin podemos asignarle un valor

y = 14 14;

Pero. Al puntero debemos asignarle una direccin de memoria


AB008

ptrentero

ptrentero=&y; &y

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Del ejemplo:
La variable y ocupa 4 bytes (int) y tiene el valor 14 La variable ptrentero ocupa 2 bytes (direccin de memoria) y tiene el valor de AB008 En la direccin de AB008 se encuentra almacenado un dato entero cuyo valor es el de la variable y (14) Entonces, si se almacena la direccin de memoria, puedo obtener el dato all almacenado ?????

SI!

Comando de indireccin

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Comando de Indireccin
Direccin
AB001 AB002 AB003 AB004 AB005 AB006 AB007 AB008 AB009 AB00A AB00B AB00C AB00D AB00E AB00F AB010 AB011 AB012 AB013 AB014 . . N

Valor

A partir de un puntero que almacena una direccin de memoria podemos usar el comando de indireccin (*):

* ptrentero 14
Anteponer * al nombre del puntero significa: El valor apuntado por

ptrentero

AB008

Y cmo funciona????

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Comando de Indireccin
Direccin
AB001 AB002 AB003 AB004 AB005 AB006 AB007 AB008 AB009 AB00A AB00B AB00C AB00D AB00E AB00F AB010 AB011 AB012 AB013 AB014 . . N

Valor

El comando es utilizado para, a partir, de una direccin de memoria obtener el valor all almacenado .

14

Se puede usar para: Imprimir el valor: printf (%d,*ptrentero);

ptrentero

AB008

Programacin 1 - 2012-02 - Unidad 7 - Punteros

Comando de Indireccin
Direccin
AB001 AB002 AB003 AB004 AB005 AB006 AB007 AB008 AB009 AB00A AB00B AB00C AB00D AB00E AB00F AB010 AB011 AB012 AB013 AB014 . . N

Valor

El comando es utilizado para, a partir, de una direccin de memoria obtener el valor all almacenado .

14

Se puede usar para: Alterar el Valor :

15
AB008

ptrentero

*ptrentero= *ptrentero +1;

Ejercicios
Muestra el uso de direcciones

Ejemplo 1

Escribir un programa que permita declarar dos variables enteras, asignarles un valor e imprimir sus direcciones de memoria.
#include <stdio.h> #include <conio.h> void main() { int varA; int varB; varA = 90; varB = 120; printf("varA = %d y su direccion es: %p\n", varA, &varA); printf("varB = %d y su direccion es: %p\n", varB, &varB); getch(); }

Ejemplo 2

Escribir un programa que permita declarar dos variables enteras, asignarles un valor e imprimir sus direcciones de memoria. Luego, declarar un puntero a una de ellas y manipular el dato a travs del puntero.
void main() { int varA; int varB; varA = 90; varB = 120; printf("varA = %d y su direccion es: %p\n", varA, &varA); printf("varB = %d y su direccion es: %p\n", varB, &varB); int *pA = &varA; int *pB; pB = &varB; *pB = 45; // declara la variable puntero pA y le asigna un valor // declara la variable puntero pB // le asigna un valor // modifica el valor apuntado por pB

printf("varA = %d y su direccion es: %p\n", *pA, pA); printf("varB = %d y su direccion es: %p\n", *pB, pB); } getch();

You might also like