Escolar Documentos
Profissional Documentos
Cultura Documentos
Seminario 1
Tipo referencial y gestin de memoria en C++
v 1.1
Objetivos
Conocer la organizacin de memoria de un programa y
comprender la funcin de cada una de sus partes
Conocer y saber utilizar el tipo Puntero en C/C++:
declaracin de variables y manejo de operadores
Comprender el concepto de referencia en C++, su relacin
con el tipo puntero y saber utilizarlas.
Saber utilizar el tipo puntero y las referencias para realizar el
paso de parmetros por variable de tipos simples y tipos
estructurados
Conocer la relacin entre vectores de elementos y el tipo
puntero
Saber reservar y liberar memoria dinmica en C++
2
Zona de cdigo
Zona de datos
Montculo (Heap)
Datos
Dinmicos
Uso de punteros
Cuando se declara una variable de tipo puntero tendr un
valor no definido que habr que inicializar
En C++ se utiliza el valor 0 para identificar una direccin de
memoria no inicializada
int *pvalor=0;
El operador & se utiliza para obtener la direccin de memoria
de una variable
int valor=27;
int *pvalor=&valor;
Uso de punteros
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
27
int valor=27;
1000
int *pvalor=&valor;
Persona alumno("Carlos");
Persona *palumno=&alumno;
cout << (*palumno).nombre;
cout << (*palumno).getNombre();
cout << palumno->nombre;
cout << palumno->getNombre();
int valor=3;
Cuadrado(&valor);
cout << valor; //Salida 9
Referencias en C++
En C++ para simplificar el uso de punteros principalmente en
el paso de parmetros y en la devolucin de valores de
funciones se crearon las referencias
Una referencia se puede considerar como otra forma de
denominar a una variable
Una vez declarada no se puede variar el objeto al que est
asociada
int valor1=27;
int valor2=3;
int &mivalor=valor1;
int valor=3;
Cuadrado(valor);
cout << valor; //salida 9
9
Arrays y punteros
El identificador de un array es realmente un puntero a la
direccin de memoria del primer elemento
int valores[]={32,45,87,23};
int *p,*q;
p=valores; //asignamos el valor 1000
cout<<p[1]; //Salida 45
p[2]=88;
cout << valores[2]; //Salida 88
q=&valores[2];
cout << *q; //Salida 88
cout << q[0]; //Salida 88
cout << q[1]; //Salida 23
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
32
valores
1000
45
p
87
1000
23
10
int valores[]={1,2,3,4,5};
Duplica(valores,5);
Visualiza(valores,5); //2,4,6,8,10
Duplica(&valores[2],2);
Visualiza(valores,5); //2,4,12,16,10
11
13